如何查找包含在require / include期间执行的类以外的类和代码的php文件?

时间:2016-08-30 09:40:05

标签: php linux

有没有办法检测或查找包含自动加载或需要时执行的类和代码的文件?像例子一样:

<?php
class SomeClass
{
  private $variable;
  public function __construct($variable) {
    $this->variable = $variable;
  }
}

// example usage
$foo = new SomeClass('test');
var_dump($foo);

// some other code

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

感谢。

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

2 个答案:

答案 0 :(得分:0)

也许您搜索单词class并将结果传递给new?

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

答案 1 :(得分:0)

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

不那么正确的方法(肯定是一个容易出现误报的方法)就是编写自己的简单解析器(可能比使用Tokenizer更难)或者使用awk组合使用一些简单的正则表达式找出类和名称空间周围的东西。虽然我对此并不太熟悉(而且我非常确定regexp本身并不够)所以我无法提供一个例子。