来自不同文件的相同名称的校准功能

来自不同文件的相同名称的校准功能

问题描述:

对于我的网站,我打算有几个附加组件。目前我能够获得用户需要的插件,但我不确定如何包含它们。来自不同文件的相同名称的校准功能

我已经构建了我的目录,使得插件都在一个名为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()那样命名的函数,但如果可能,我想避免这种情况。对我的困境有什么建议吗?

+1

你为什么不只是执行初始化代码,当你包括初始脚本? – KingCrunch 2012-04-03 17:59:51

不幸的是,没有办法使用全局函数。

但如果你使用类为你的插件功能,那么你可以做这样的事情:

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()。

http://php.net/manual/en/language.oop5.interfaces.php