【问题标题】:How to find php files containing class and code outside it that would be executed during require/include?如何找到包含将在require/include期间执行的类和外部代码的php文件?
【发布时间】:2016-08-30 09:40:04
【问题描述】:

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

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

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

// some other code

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

谢谢。

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

【问题讨论】:

  • 你的编辑器不提供目录搜索功能吗?
  • 如果您有过载,该脚本应将您指向文件夹或文件夹结构和文件命名约定
  • 如果你有需求,那应该指向一个特定的文件
  • @RiggsFolly 它确实可以,但是我如何使用它来查找包含类的类之外的代码?
  • 你说的代码在类之外是什么意思

标签: php linux


【解决方案1】:

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

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

【讨论】:

  • 有趣的方法,但不会提供太多帮助,因为课堂上可能有很多“新”用法和/或外面没有(可能只是转储或其他代码)。
【解决方案2】:

正确(并且最不容易出错但很难)的方法是使用 PHP 的 Tokenizer。您可以使用 glob 来获取所有 PHP 文件。然后在它们包含T_CLASS(或T_NAMESPACE)标记时使用标记器将它们标记为类文件,然后跳过类本身并查找除这些标记(以及命名空间、cmets 和这样)当你找到它时输出你的文件名。

不太合适的方法(肯定是一种容易误报的方法)是编写自己的简单解析器(这可能比使用 Tokenizer 更难)或使用一些简单的正则表达式和 awk 组合找出类和命名空间周围的东西。不过,我对此并不太熟悉(而且我很确定仅靠正则表达式是不够的),因此我无法提供示例。

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2016-03-08
    • 2011-05-10
    相关资源
    最近更新 更多