此问题与Finding the PHP File (at run time) where a Class was Defined
类似我可以找到定义了Object的文件:
$reflector = new ReflectionClass(get_class($object));
echo $reflector->getFileName();
但是,我需要找到方法,例如:$ object-> method()在/var/www/html/object.php第201行中定义
答案 0 :(得分:1)
我的第一个猜测是阅读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个对象,它们没有关于方法的位置的信息宣布。所以上面的解决方案看起来是唯一的方式。