我设计了一个PHP 5.5+框架,由超过750个不同的类组成,以构建Web应用程序和网站。
理想情况下,我希望能够通过生成一个版本来减小其大小,该版本本身只包含给定项目所需的基本文件和资源(无论是网站还是Web应用程序)。
我想做的是能够:
到目前为止,我已经完成了第二部分。但最重要的部分是第一部分,那就是我遇到问题的地方。我有一个函数利用get_declared_classes()
和get_declared_traits()
,get_defined_constants()
和get_defined_functions()
来获取用户定义的类,特征,函数和常量的完整列表。但它给了我很多一切,这不是我想要的。
是否有办法获取所有已定义的类,函数和常量(不需要特征,因为我可以在每个类上运行class_uses()
并获取该类使用的特征列表)对于单个给定脚本?
我知道有token_get_all()
功能,但是我没有运气就试过了(或者可能是我用错了方法)。
任何提示?任何帮助将不胜感激:)
答案 0 :(得分:1)
您可以使用PHP Parser。它根据您提供的文件构造抽象语法树。然后,您可以分析每个文件的输出,并生成可用的报告。
除此之外,您可以使用已经提到的token_get_all()
方法,并自己编写一个小解析器。根据您的项目,这可能更容易或更困难。例如,你使用了很多new X()
构造,还是倾向于通过构造函数传递依赖项?
不幸的是,这些是你唯一可行的选择,因为PHP是动态类型语言。
但是,如果使用依赖注入,则可能需要查看DI框架的内部缓存文件,这些文件通常包含此类依赖关系映射。如果你不使用这样的框架,我建议你开始这样做,特别是因为你的项目很大,而且这是依赖注入优秀的地方。 PHP-DI,其中一个框架,在我的一些中型项目(25k SLOC)中证明是成功的。
谁知道?也许重构你的项目使用DI将让你完成你想要的任务,甚至无需了解所有依赖项。我确信的一件事是它会帮助你维护它。