PHP - 重置自动加载和声明的类
Posted
技术标签:
【中文标题】PHP - 重置自动加载和声明的类【英文标题】:PHP - reset autoload and declared classes 【发布时间】:2017-04-25 23:11:57 【问题描述】:在 php 中,我有一个函数可以根据在父站点中选择的子站点来设置自动加载器。
使用spl_autoload_unregister
功能可以很好地重置自动加载器。
但是,我注意到,当我加载一个在子站点之前已经启动的类文件时,重置自动加载器后仍然使用这个“旧”类文件。
示例:
父站点从c:\parent\site\RouterClass
加载example\namespace\RouterClass
然后我重置所有自动加载器并启动子站点并为子站点设置正确的自动加载器。
然后子站点加载 example\namespace\RouterClass
,但不是通过新的自动加载器从 c:\child\site\RouterClass
获取此文件,而是从父站点定义的旧文件中获取类。
我看到通过函数注册的类:
get_declared_classes()
但我无法重置此变量列表。如果可以重置此类缓存,则 PHP 必须重新搜索此 RouterClass
并检查子站点自动加载器以找到它。
我检查的第二个选项是runkit_method_redefine
,但是对于像runkit_class_redefine
这样的类没有类似的功能。
有人知道如何重置声明的类列表吗?或者如何在不重命名子站点的所有命名空间的情况下实现上述目标。
【问题讨论】:
你包含一个文件,该文件被包含(duh)。您需要做什么以及为什么? 因为您可以从代码中的上下文进行更改,并在框架 v1 中使用一个上下文,在框架 v2 中使用其他上下文。 【参考方案1】:不可能。一旦声明了一个类,它就永远存在。
如果您需要动态定义自动加载器,则需要在加载任何受影响的类之前执行此操作。
【讨论】:
以上是关于PHP - 重置自动加载和声明的类的主要内容,如果未能解决你的问题,请参考以下文章