PHP - 重置自动加载并声明 类

PHP - reset autoload and declared classes

在 PHP 中,我有一个功能可以根据在父站点中选择的子站点来设置自动加载程序。

spl_autoload_unregister 功能可以很好地重置自动装载机。

但是,我注意到当我加载一个在子站点之前已经启动的 class-文件时,这个 'old' class-文件仍然被使用重置自动加载器后。

示例:

父站点从 c:\parent\site\RouterClass

加载 example\namespace\RouterClass

然后我重置所有自动加载器并启动子站点并为子站点设置正确的自动加载器。

然后子站点加载 example\namespace\RouterClass 但不是通过新的自动加载器从 c:\child\site\RouterClass 获取此文件,而是从旧文件中获取 class父站点。

我看到 class 通过函数注册:

get_declared_classes()

但我无法重置此变量列表。如果可以重置此 class-缓存,则 PHP 必须为此 RouterClass 开始新的搜索,并将检查子站点自动加载程序以找到它。

我检查的第二个选项是 runkit_method_redefine,但是 class 没有类似的功能,例如 runkit_class_redefine

有没有人知道如何重置已声明的 class 列表?或者如何在不重命名子站点的所有名称空间的情况下实现上述目标。

不可能。一旦 class 被声明,它就永远存在。

如果您需要动态定义自动加载器,则需要在加载任何受影响的 classes 之前执行此操作。