이 질문을 정의했다 (런타임)에 PHP 파일을 찾기는 Finding the PHP File (at run time) where a Class was Defined객체의 메서드가
나는 개체 정의 된 파일을 찾을 수 있습니다 유사하다 나는 방법을 찾아야한다 : $ object-> method()는 /var/www/html/object.php 줄에 정의되어있다.
이 질문을 정의했다 (런타임)에 PHP 파일을 찾기는 Finding the PHP File (at run time) where a Class was Defined객체의 메서드가
나는 개체 정의 된 파일을 찾을 수 있습니다 유사하다 나는 방법을 찾아야한다 : $ object-> method()는 /var/www/html/object.php 줄에 정의되어있다.
내 첫 번째 추측은 PHP 파일을 읽고 일부 정규 표현식을 사용 중입니다.
function getLineWhereMethodIsDefined($object, $method_name) {
$class_name = get_class($object);
$reflector = new ReflectionClass($class_name);
$file_name = $reflector->getFileName();
foreach (file($file_name) as $i => $line) {
if (preg_match("'function\s+ " . $method_name . "\('s")) {
$text = $class_name."::".$method_name."()";
$text .= " is defined in ".$file_name." on line ".($i + 1);
return $text;
}
}
return false;
}
file()
은 전체 파일을 메모리로 읽으므로 메모리 사용이 향상 될 수 있으므로 while(false !== gets()) { }
으로 처리하면 대용량 파일을 분석 할 때 훨씬 더 많은 메모리가 효과적입니다.
참고 :는 ReflectionClass 문서에 따르면, 당신은 클래스의 메소드에 대해 얻을 수있는 유일한 정보는 메소드가 선언 된 위치에 대한 정보가없는 ReflectionMethod 객체입니다. 그래서 위의 해결책은 imho만의 유일한 방법입니다.
'진짜'답변이 나오지 않으면 연결된 질문에 대한 답변을 사용하여 언제든지 소스 파일을 읽고 정규식을 사용하여 함수 정의를 찾을 수 있습니다. – grossvogel