In PHP habe ich eine Funktion, die Auto-Loader basierend darauf, welche Child-Site innerhalb der Parent-Site ausgewählt ist.PHP - Reset Autoload und deklarierte Klassen
Das Zurücksetzen der Auto-Loader funktioniert hervorragend mit der spl_autoload_unregister
Funktion.
Was ich jedoch bemerke, ist, dass beim Laden einer Klassendatei, die bereits vor der Child-Site initiiert wurde, diese "alte" Klassendatei nach dem Zurücksetzen der Auto-Loader weiterhin verwendet wird.
Beispiel:
Eltern-Seite lädt example\namespace\RouterClass
von c:\parent\site\RouterClass
Dann setzte ich alle Selbstlader und das Kind vor Ort initiieren und den richtigen Auto-Lader für das Kind vor Ort festgelegt.
Dann lädt die Child-Site example\namespace\RouterClass
, aber statt diese Datei über den neuen Auto-Loader von c:\child\site\RouterClass
erhält es die Klasse aus der alten Datei wie von der übergeordneten Website definiert.
Ich sehe die Klasse über die Funktion registriert:
get_declared_classes()
Aber ich bin nicht in der Lage diese Variablenliste setzen. Wenn ein Reset dieses Klassen-Caches möglich ist, muss PHP eine neue Suche nach diesem RouterClass
starten und wird den Child-Site-Auto-Loader prüfen, um es zu finden.
Zweite Option, die ich überprüft habe, war , aber es gibt keine ähnliche Funktion für Klassen wie runkit_class_redefine
.
Hat jemand eine Idee, wie man die deklarierte Klassenliste zurücksetzt? Oder wie Sie das oben genannte erreichen, ohne alle Namespaces der Child-Site umzubenennen.
Wenn Sie eine Datei einschließen, ist diese Datei enthalten (duh). Was musst du machen und warum? – Federkun
Da können Sie dann aus Kontext innerhalb Ihres Codes ändern und mit einem Kontext in Framework v1 und mit anderem Kontext in Framework v2 arbeiten. – PeterH