我们有一个运行树遍历循环,它可以很好地识别PHP文件,但是对于每个文件,我们针对它运行PHP的FileReflection
,这需要首先包含该文件。出于此脚本的目的,我们只对包含 Class
、 Interface
或 Function
声明的文件感兴趣。
有没有办法在对文件运行include()
之前确定文件是否包含Class
、Interface
或Function
声明?
我的猜测是,它必须是针对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);
...