Ala*_*orm 102 php reflection class
PHP中是否有任何反射/内省/魔术可以让你找到定义特定类(或函数)的PHP文件?
换句话说,我有一个PHP类的名称,或一个实例化的对象.我想将此传递给某些东西(函数,Reflection类等),它将返回定义类的文件系统路径.
/path/to/class/definition.php
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用(get_included_files())
获取到目前为止已包含的所有文件的列表,然后手动解析它们,但这是一次尝试的大量文件系统访问.
我也意识到我可以在我们的__autoload机制中编写一些额外的代码来缓存这些信息.但是,在我想到的情况下,修改现有的__autoload是不受限制的.
听说可以做到这一点的扩展会很有趣,但我最终会喜欢可以在"库存"安装上运行的东西.
Gor*_*don 214
尝试
例:
class Foo {}
$reflector = new \ReflectionClass('Foo');
echo $reflector->getFileName();
Run Code Online (Sandbox Code Playgroud)
这将ReflectionClass
在无法找到文件名时返回,例如在本机类上.
对于命名空间文件中的ReflectionClass ,添加前缀"\"以使其全局如下:
$ reflector = new\ReflectionClass('FOO');
否则,它会生成一个错误,表示未定义名称空间中的ReflectionClass. 我没有权利对上述答案发表评论,因此我将此作为补充答案.
小智 6
使用反射器,您可以构建如下函数:
function file_by_function( $function_name ){
if( function_exists( $function_name ) ){
$reflector = new \ReflectionFunction( $function_name );
}
elseif( class_exists( $function_name ) ){
$reflector = new \ReflectionClass( $function_name );
}
else{
return false;
}
return $reflector->getFileName();
}
Run Code Online (Sandbox Code Playgroud)
file_by_function( 'Foo' ) 将返回定义 Foo 的文件路径,如果 Foo 是一个函数或类,则返回 false 如果无法找到该文件