[英]In PHP, is there a way to get all declared classes in a specific namespace?
[英]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將使您無需了解所有依賴關系即可完成所需的任務。 我確定的一件事是它將幫助您進行維護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.