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

2022-08-30 07:06:34

PHP中是否有任何反射/内省/魔术可以让你找到定义特定类(或函数)的PHP文件?

换句话说,我有一个PHP类或实例化对象的名称。我想将它传递给某些东西(函数,反射类等),这将返回定义类的文件系统路径。

/path/to/class/definition.php

我意识到我可以使用( 来获取到目前为止已包含的所有文件的列表,然后手动解析它们,但是一次尝试就需要大量的文件系统访问。get_included_files())

我还意识到我可以在我们的__autoload机制中编写一些额外的代码,将这些信息缓存在某个地方。但是,在我考虑的情况下,修改现有__autoload是禁止的。

听说可以做到这一点的扩展会很有趣,但我最终想要一些可以在“库存”安装上运行的东西。


答案 1

尝试ReflectionClass

例:

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

当找不到文件名时,这将返回,例如在本机类上。false


答案 2

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

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

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


推荐