来自不同文件的相同名称的校准功能
问题描述:
对于我的网站,我打算有几个附加组件。目前我能够获得用户需要的插件,但我不确定如何包含它们。来自不同文件的相同名称的校准功能
我已经构建了我的目录,使得插件都在一个名为plugins
的目录中,然后每个插件位于该目录下,然后每个插件目录都有一个我想调用的init.php
文件。随着扫描目录的构建阵列这样:
Array ([2] => forums [3] => mesages [4] => profile [5] => clock)
以及相应的目录阵列成为:
Array (
[2] => plugins/forums/init.php
[3] => plugins/mesages/init.php
[4] => plugins/profile/init.php
[5] => plugins/something/init.php
)
我的问题/问题是我如何调用这些init.php
的功能。如果我要通过数组做一个foreach
并且以某种方式require()
他们,那么只需从init.php
调用一个函数就可以来自任何插件。
我曾考虑过像clock_init()
那样命名的函数,但如果可能,我想避免这种情况。对我的困境有什么建议吗?
答
不幸的是,没有办法使用全局函数。
但如果你使用类为你的插件功能,那么你可以做这样的事情:
foreach($plugins as $plugin) {
include "$plugin.php";
$klas = new $plugin();
$klas::method();
}
你的插件类:
class forums {
function forums() { ... }
function method() { ... }
}
上面的代码是未经测试,但它是相当多的理念。
答
Initiall你可以有这个数组合并成一个,使用密钥作为包括类型,就像这样:
$inits = array(
'forums' => 'plugins/forums/init.php',
'messages' => 'plugins/messages/init.php'
);
然后,您可以遍历/无论你需要调用。
if (I WANT TO RUN FORUM INIT)
{
include $inits['forums'];
initFunction();
}
就我个人而言,我将每个这些作为一个类,并设置一个接口。然后这些将实现一致的方法名称(在我的界面中声明),如init()。
你为什么不只是执行初始化代码,当你包括初始脚本? – KingCrunch 2012-04-03 17:59:51