我正在尋找擴展MyParentClass的所有類,以便我可以在它們上運行特定的靜態函數。獲取某個類的所有子類PHP
我知道PHP有一個函數get_declared_classes,然後我可以使用instanceof
或Reflection::isSubclassOf()
但但我的項目有太多的類,這是明智地使用。
我的下一個選擇是,以確保所有適當的類是在一個特定的文件夾,然後仔細檢查與雲南財貿
有另一種方法,我可以做到這一點?
我正在尋找擴展MyParentClass的所有類,以便我可以在它們上運行特定的靜態函數。獲取某個類的所有子類PHP
我知道PHP有一個函數get_declared_classes,然後我可以使用instanceof
或Reflection::isSubclassOf()
但但我的項目有太多的類,這是明智地使用。
我的下一個選擇是,以確保所有適當的類是在一個特定的文件夾,然後仔細檢查與雲南財貿
有另一種方法,我可以做到這一點?
您想知道整個代碼庫的哪些類擴展了某個主類。如果不搜索所有文件以獲取類定義,則無法知道這一點,然後檢查所有找到的類是否擴展主類(或擴展擴展主類的類)。 get_declared_classes()
不會幫你,因爲這個函數只會列出在調用這個函數之前在代碼執行過程中被使用的類。它不會列出在文件中定義但尚未(自動)加載的任何類。
我想知道你在做什麼。你說你想對它們應用一個靜態函數 - 這到底是什麼?我感受到X-Y-problem的另一個實例,也就是說,因爲您認爲搜索所有擴展類將解決您所問的問題,但是應該問問題是否讓您這麼想。
我同意@Sven的回答。
除了事實上,它可能X-Y的問題 - 有這使我想起另一種解決方案:
您可以創建和維護類映射。
$classes = array(
'ClassA',
'ClassB',
// '...'
);
我的答案中隱含了一個類圖。 :)如果你手工創建它,它將包含錯誤。當你自動創建它時,它實質上是「掃描整個代碼庫的類」。 – Sven
任何理由不只是檢查類實例是否是一個子類而不是這樣做? – OneOfOne
這就是人們開始使用名稱空間的原因。順便說一句。你可以使用'instanceof'關鍵字 – Peter
注意:我的項目有太多的類可以使用get_declared_classes - 我正在尋找所有的子類 - 我不知道他們在哪裏 – Lizard