0

这个问题类似于Find the PHP File (at run time) where a Class is Defined

我可以找到定义对象的文件:

$reflector = new ReflectionClass(get_class($object));
echo $reflector->getFileName();

但是,我需要找到方法,例如: $object->method() 定义在 /var/www/html/object.php 行 201

4

1 回答 1

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对象,它们没有关于方法声明位置的信息。因此,上述解决方案似乎是恕我直言的唯一方法。

于 2012-11-16T17:40:39.760 回答