寻找定义类的PHP文件(在运行时)

PHP中是否有任何reflection/内省/魔法,可以让您find定义了特定类(或函数)的PHP文件?

换句话说,我有一个PHP类的名称,或一个实例化的对象。 我想把它传递给(函数,reflection类等),将返回类定义的文件系统path。

/path/to/class/definition.php 

我意识到我可以使用( get_included_files())来获得目前为止已经包含的所有文件的列表,然后手动parsing它们,但是对于单次尝试来说,这是大量文件系统访问。

我也意识到我可以在我们的__autoload机制中编写一些额外的代码来caching这些信息。 但是,在我所想的情况下,修改现有的__自动加载是不受限制的。

听到可以做到这一点的扩展会很有趣,但我最终会喜欢一些可以在“股票”安装上运行的东西。

尝试

  • ReflectionClass :: getFileName – 获取一个文件名

例:

 class Foo {} $reflector = new ReflectionClass('Foo'); echo $reflector->getFileName(); 

当文件名不能被find时,例如在本机类上,这将返回false

对于名称空间文件中的ReflectionClass,添加前缀“\”使其成为全局的,如下所示:

$ reflector = new \ ReflectionClass('FOO');

否则,它会在未定义的名称空间中生成一个表示ReflectionClass的错误。 我没有权利对上述答案发表评论,所以我把这个作为补充答案。

如果你有一个includes文件夹,你可以运行一个shell脚本命令来通过执行“class $ className”来“grep”: $filename = ``grep -r "class $className" $includesFolder/*\它的文件。除此之外,我不认为有任何PHP的魔术function来做到这一点。