来自不同文件的同名Cal函数

时间:2012-04-03 17:56:32

标签: php

对于我的网站,我打算有几个附加组件。目前我能够获得用户需要的插件,但我不确定如何包含它们。

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

2 个答案:

答案 0 :(得分:0)

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

虽然如果你为插件函数使用类,那么你可以这样做:

foreach($plugins as $plugin) { 
  include "$plugin.php";
  $klas = new $plugin();
  $klas::method();
}

你的插件类:

class forums {
  function forums() { ... }
  function method() { ... }
}

以上代码未经测试,但几乎就是这个想法。

答案 1 :(得分:0)

Initiall你可以把这个数组合成一个,使用key作为include类型,如下所示:

$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