如何找到包含类和代码的php文件,它将在require/include期间执行


How to find php files containing class and code outside it that would be executed during require/include?

是否有一种方法来检测或查找包含在自动加载或需要时执行的类和代码的文件?像这样的例子:

<?php
class SomeClass
{
  private $variable;
  public function __construct($variable) {
    $this->variable = $variable;
  }
}
// example usage
$foo = new SomeClass('test');
var_dump($foo);
// some other code

我需要在一个旧的项目中找到它们,并且有太多的文件需要手动检查。

谢谢。

编辑:我不能自动加载所有的(因为我不知道在什么文件中不需要的代码可能是),甚至没有必要显示我任何执行的代码,除非它会有一些错误。

也许您搜索单词class并将结果管道到单词new上?

grep -r --include "*.php" 'class' | grep 'new'

正确的(以及最不容易出错的但最难的)方法是使用PHP的Tokenizer。您可以使用glob来获取所有PHP文件。当它们包含T_CLASS(或T_NAMESPACE)令牌时,使用标记器将它们标记为类文件,然后逐个检查它们,然后跳过类本身并查找除这些令牌(以及命名空间,注释等)之外的任何内容,当您找到它时输出文件名。

不太合适的方法(肯定是一个容易误报的方法)应该编写自己的简单解析器(这可能比使用Tokenizer更难)或使用一些简单的正则表达式与awk组合来查找类和名称空间周围的东西。我对这方面没有太多经验(而且我很确定单独使用regexp是不够的),所以我不能真正提供一个例子。