查找定义了对象方法的PHP文件(在运行时)

时间:2012-11-16 17:16:26

标签: php method-declaration

此问题与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行中定义

1 个答案:

答案 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个对象,它们没有关于方法的位置的信息宣布。所以上面的解决方案看起来是唯一的方式。