namespaces — сбросить автозагрузку и объявленные классы

В PHP у меня есть функция, которая устанавливает автозагрузчики в зависимости от того, какой дочерний сайт выбран в родительском сайте.

Сброс автопогрузчиков идет отлично с spl_autoload_unregister функция.

Однако, что я замечаю, так это то, что когда я загружаю файл класса, который уже был инициирован до дочернего сайта, этот «старый» файл класса все еще используется после сброса автозагрузчиков.

Пример:

Загрузка родительского сайта 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,

У кого-нибудь есть идеи как сбросить объявленный список классов? Или как добиться вышеупомянутого без переименования всех пространств имен дочернего сайта.

0

Решение

Невозможно. Как только класс объявлен, он там навсегда.

Если вам нужно определить автозагрузчики динамически, это необходимо сделать до загрузки любого из затронутых классов.

2

Другие решения

Других решений пока нет …