【问题标题】:How do I reload a file in PHP?如何在 PHP 中重新加载文件?
【发布时间】: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 的评论中:似乎您正在尝试在运行时执行影响整个脚本的配置选项。您最好将每个请求配置为使用特定插件,而不是尝试在运行时修改类定义。除非我误解了你的目标..

标签: php oop


【解决方案1】:

对于 PHP 应用程序来说,这似乎不是一个好主意。我不确定,但可能是 here is the answer on your questionhere is the link on RunKit doc(在 cmets 中找到)

【讨论】:

  • 我知道这并不难,但有时我对这个主题有一些具体的问题,当然在我有这个特权之前我不能通过评论提问,我不得不创建一个回答。在我做出正确决定之前 - 另一位成员已经询问了主题启动器并编写了可接受的解决方案。最简单的问题(尽管我可能有错误,但它可能是,它会消失)不是那么有趣,并且解决方案出现在我阅读任务之前。 :) 对此感到抱歉..
猜你喜欢
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多