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


PHP - get all declared resources (traits, classes, functions and constants) within a given script?

我设计了一个PHP 5.5+框架,包含750多个不同的类来制作web应用程序和网站。

我想,理想情况下,能够通过产生一个版本的自己只包含一个给定项目(无论是一个网站或web应用程序)所需的基本文件和资源来减少其大小。

我想做的是能够:

  • 将特征、类、常量和函数的数量减少到每个项目最基本的数量
  • 压缩代码文件以实现较小的部署大小和更快的执行(如果可能的话)
到目前为止,我已经完成了第二部分。但最重要的部分是第一部分,这就是我遇到问题的地方。我有一个函数利用get_declared_classes()get_declared_traits(), get_defined_constants()get_defined_functions()来获得用户定义的类,特征,函数和常量的完整列表。但是它几乎给了我一切,这不是我想要的。

是否有一种方法可以获得所有定义的类,函数和常量(不需要性状,因为我可以在每个类上运行class_uses()并获得该类使用的性状列表)一个给定的脚本?

我知道有token_get_all()功能,但我尝试了它没有运气(或者也许是我使用它的错误方式)。

提示吗?如有任何帮助,将不胜感激:)

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

除此之外,您还可以使用前面提到的token_get_all()方法,自己编写一个小型解析器。根据您的项目,这可能更容易或更困难。例如,您是否使用大量的new X()结构,或者您是否倾向于通过构造函数传递依赖关系?

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


如果你使用依赖注入,但是,你可能想看看你的DI框架的内部缓存文件,其中经常包含这样的依赖映射。如果您不使用这样的框架,我建议您开始这样做,特别是因为您的项目很大,而这正是依赖注入所擅长的。PHP-DI,一个这样的框架,在我的一些中型项目(25k SLOC)中被证明是成功的。

谁知道呢?也许重构你的项目来使用DI会让你完成你想要的任务,甚至不需要了解所有的依赖关系。我可以肯定的是,它将帮助您维护它。