【发布时间】:2016-02-05 20:13:42
【问题描述】:
我包含一个文件,该文件用作 PHP 应用程序中的插件,以便稍后使用 ReflectionClass 实例化其中的类。现在,我想在运行时重新加载整个文件,这样我就可以在程序运行时更新代码。有什么办法可以做到吗?
这是我的一些代码:
$info = new \SplFileInfo("plugins/".$name."/".$main);
include("plugins/".$name."/".$main);
$class = new \ReflectionClass($name."\\".$info->getBasename(".php")); //Taking care of using the correct namespace
$this->class = $class->newInstanceWithoutConstructor();
两次运行完全相同的代码会导致程序崩溃。
编辑:我的插件架构由一个插件管理器组成,它应该加载和卸载插件。卸载工作正常。还有一个 EventManager,插件使用它来订阅我的程序或其他插件可以触发的特定事件。卸载插件后,插件本身的对象不再被任何东西使用。
感谢您的帮助
【问题讨论】:
-
这听起来像是您正在尝试构建一个经典的“程序”,该程序旨在在单独的进程中执行。对于这样的 php 是一种 非常 不常见的语言...我不知道可以删除定义以重新声明类或名称空间等内容,抱歉。您可能要考虑为此生成子进程,然后当然可以为您生成的每个子进程加载文件。但不知何故,我怀疑这是你想要做的。也许您想告诉我们更多关于您的架构的信息?
-
添加到问题中,谢谢。
-
为什么要选择 php 作为这样的语言?!?
-
如何与那个“程序”交互?它有用户界面吗?它服务于什么目的,那么它提供了哪些功能?它是如何推出的?我问这一切是因为我仍然认为这是一个巨大的错误理解......
-
只是添加到 arkascha 的评论中:似乎您正在尝试在运行时执行影响整个脚本的配置选项。您最好将每个请求配置为使用特定插件,而不是尝试在运行时修改类定义。除非我误解了你的目标..