PHP - 获取给定脚本中的所有声明的资源(特征,类,函数和常量)?

时间:2014-07-18 10:28:48

标签: php function class token traits

我设计了一个PHP 5.5+框架,由超过750个不同的类组成,以构建Web应用程序和网站。

理想情况下,我希望能够通过生成一个版本来减小其大小,该版本本身只包含给定项目所需的基本文件和资源(无论是网站还是Web应用程序)。

我想做的是能够:

  • 将特征,类,常量和函数的数量减少到每个项目的基本要素
  • 压缩代码文件以实现更小的部署大小和更快的执行(如果可能)

到目前为止,我已经完成了第二部分。但最重要的部分是第一部分,那就是我遇到问题的地方。我有一个函数利用get_declared_classes()get_declared_traits()get_defined_constants()get_defined_functions()来获取用户定义的类,特征,函数和常量的完整列表。但它给了我很多一切,这不是我想要的。

是否有办法获取所有已定义的类,函数和常量(不需要特征,因为我可以在每个类上运行class_uses()并获取该类使用的特征列表)对于单个给定脚本?

我知道有token_get_all()功能,但是我没有运气就试过了(或者可能是我用错了方法)。

任何提示?任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

您可以使用PHP Parser。它根据您提供的文件构造抽象语法树。然后,您可以分析每个文件的输出,并生成可用的报告。

除此之外,您可以使用已经提到的token_get_all()方法,并自己编写一个小解析器。根据您的项目,这可能更容易或更困难。例如,你使用了很多new X()构造,还是倾向于通过构造函数传递依赖项?

不幸的是,这些是你唯一可行的选择,因为PHP是动态类型语言。


但是,如果使用依赖注入,则可能需要查看DI框架的内部缓存文件,这些文件通常包含此类依赖关系映射。如果你不使用这样的框架,我建议你开始这样做,特别是因为你的项目很大,而且这是依赖注入优秀的地方。 PHP-DI,其中一个框架,在我的一些中型项目(25k SLOC)中证明是成功的。

谁知道?也许重构你的项目使用DI将让你完成你想要的任务,甚至无需了解所有依赖项。我确信的一件事是它会帮助你维护它。