来自未知名称 class 的调用方法
Call method from class of unknown name
标题可能令人困惑,但我不知道该如何表达。所以我希望能够初始化一个 class 并从中调用方法,而无需在从数组中获取它之前不知道 class 名称。
我想做什么
$modules = array(
'Forums' => array(
'class'=>'Forums',
'classVar'=>'forum'
)
);
foreach($modules as $name => $module) if ($module['enabled']) {
require_once('include/scripts/'.$module['link']);
$$module['classVar'] = new $module['class'];
$$module['classVar'] = $module['classVar'];
global $$module['classVar'];
}
但是,我知道这是完成此任务的迂回方法,我需要知道是否有更简单的方法,以及这是否合乎逻辑。
我想这样做的原因是因为我正在做的工作将能够接受模块,我需要能够从模块中获取所有统计信息并将它们显示在主管理面板中,但是没有办法知道模块是否已启用,如果我没有创建它 运行 。例如,如果有人创建了 module.php
来跟踪某人点击特定 link 的次数,该软件本身不会知道它,我需要它能够从中获取统计信息。
嗯,您可能对单例设计模式感兴趣 (http://en.wikipedia.org/wiki/Singleton_pattern and http://www.phptherightway.com/pages/Design-Patterns.html)。
在这种情况下,您的配置数组中有一个 类 列表,并在您真正想要对实际模块执行某些操作时调用 "getInstance()"。
另外,看看工厂模式,它也可能对您的目的有用。
标题可能令人困惑,但我不知道该如何表达。所以我希望能够初始化一个 class 并从中调用方法,而无需在从数组中获取它之前不知道 class 名称。
我想做什么
$modules = array(
'Forums' => array(
'class'=>'Forums',
'classVar'=>'forum'
)
);
foreach($modules as $name => $module) if ($module['enabled']) {
require_once('include/scripts/'.$module['link']);
$$module['classVar'] = new $module['class'];
$$module['classVar'] = $module['classVar'];
global $$module['classVar'];
}
但是,我知道这是完成此任务的迂回方法,我需要知道是否有更简单的方法,以及这是否合乎逻辑。
我想这样做的原因是因为我正在做的工作将能够接受模块,我需要能够从模块中获取所有统计信息并将它们显示在主管理面板中,但是没有办法知道模块是否已启用,如果我没有创建它 运行 。例如,如果有人创建了 module.php
来跟踪某人点击特定 link 的次数,该软件本身不会知道它,我需要它能够从中获取统计信息。
嗯,您可能对单例设计模式感兴趣 (http://en.wikipedia.org/wiki/Singleton_pattern and http://www.phptherightway.com/pages/Design-Patterns.html)。
在这种情况下,您的配置数组中有一个 类 列表,并在您真正想要对实际模块执行某些操作时调用 "getInstance()"。
另外,看看工厂模式,它也可能对您的目的有用。