有没有办法在将文件包含在 FileReflection() 之前验证文件是否包含类、接口或函数


Is there a way to verify a file contains a class, interface or function before including it for FileReflection()?

我们有一个运行树遍历循环,它可以很好地识别PHP文件,但是对于每个文件,我们针对它运行PHP的FileReflection,这需要首先包含该文件。出于此脚本的目的,我们只对包含 ClassInterfaceFunction 声明的文件感兴趣。

有没有办法在对文件运行include()之前确定文件是否包含ClassInterfaceFunction声明?

我的猜测是,它必须是针对get_file_contents()值的正则表达式,但我希望有一个更优雅(阅读:一致和可靠)的解决方案。

自己找到了答案,对于那些感兴趣的人...

$tokens = token_get_all(file_get_contents($file,TRUE)); $valid = FALSE; foreach($tokens as $token) { if (isset($token[0]) && in_array($token[0],array(T_CLASS,T_FUNCTION,T_INTERFACE))) { $valid = TRUE; break; } } if (!$valid) { return NULL; } include_once $file; $reflection = new FileReflection($file); ...