【发布时间】:2012-07-12 21:26:45
【问题描述】:
嗯,我不知道这篇文章的标题是否正确。随意更改它。
好的,这是我的场景:
pluginA.php
function info(){
return "Plugin A";
}
pluginB.php
function info(){
return "Plugin B";
}
最后,我有一个插件管理器,负责将所有插件信息导入池数组:
Manager.php
class Manager
{
protected $pool;
public function loadPluginsInfo()
{
$plugin_names = array("pluginA.php", "pluginB.php");
foreach ($plugin_names as $name)
{
include_once $name;
$this->pool[] = info();
}
}
}
这里的问题是,当我打印池数组时,它只向我显示加载的第一个插件的信息。我认为包含的文件会覆盖信息,因为它仍然从第一个包含调用 info() 方法。
有没有办法为所有插件文件包含具有相同名称的 info() 函数的两个插件的信息?
提前谢谢你
PS:致命的无法重新声明错误永远不会抛出
【问题讨论】:
-
为什么不在pluginA.php 中创建
PluginA类?这样您就可以访问 info 方法PluginA::Info();(即 OOP) -
我有那个选项,但我不知道如何通过这种方式动态实例化一个类,因为我只能获取插件文件名
-
您将尝试重新定义 PHP 不允许的
info()函数。所以只有info()的第一个实例将被定义(插件A),其余的将被忽略。 -
通常,这应该抛出一个致命的无法重新声明错误。您可以像使用代码一样使用 David 的建议,只需替换 $this->pool[] = info();与 $tmp = 新 $name(); $this->pool[] = $tmp->info();
-
@32bitfloat 是对的!你不能定义相同的方法两次 - 它不会编译!