[英]PHP - reset autoload and declared classes
在PHP中,我有一個函數可以根據在父站點中選擇哪個子站點來設置自動加載器。
使用spl_autoload_unregister
函數可以很好地重置自動加載器。
但是,我注意到的是,當我加載在子站點之前已啟動的類文件時,在重置自動加載器后仍使用此“舊”類文件。
例:
父站點從c:\\parent\\site\\RouterClass
加載example\\namespace\\RouterClass
c:\\parent\\site\\RouterClass
然后,我重置所有自動加載器並啟動子站點,並為子站點設置正確的自動加載器。
然后,子站點將加載example\\namespace\\RouterClass
但不是通過新的自動加載器從c:\\child\\site\\RouterClass
獲取此文件,而是從父站點定義的舊文件中獲取該類。
我看到通過函數注冊的類:
get_declared_classes()
但是我無法重置此變量列表。 如果可以重置該類緩存,則PHP必須開始對此RouterClass
的新搜索,並將檢查子站點自動加載器以找到它。
我檢查的第二個選項是runkit_method_redefine
,但是對於類似runkit_class_redefine
類,沒有類似的功能。
有誰知道如何重置已聲明的類列表? 或者如何在不重命名子站點的所有名稱空間的情況下實現上述目的。
不可能。 一旦聲明了一個類,它就永遠存在。
如果需要動態定義自動加載器,則需要在任何受影響的類加載之前進行定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.