php把文件设置为插件的技巧方法(2)

以上代码加上注释不超过100行,就完成了整个插件机制的核心。需要再次说明的是,你必须将它设置成全局类,在所有 需要用到插件的地方,优先加载。用#注释的地方是你需要自行完成的部分,包括插件的获取和日志记录等等。

下面是一个简单插件的实现。

<?

/**

* 这是一个Hello World简单插件的实现

*

* @package    DEMO

* @subpackage  DEMO

* @category  Plugins

* @author    Saturn

*/

/**

*需要注意的几个默认规则:

*  1. 本插件类的文件名必须是action

*  2. 插件类的名称必须是{插件名_actions}

*/

class DEMO_actions

{

  //解析函数的参数是pluginManager的引用

  function __construct(&$pluginManager)

  {

    //注册这个插件

    //第一个参数是钩子的名称

    //第二个参数是pluginManager的引用

    //第三个是插件所执行的方法

    $pluginManager->register('demo', $this, 'say_hello');

  }

   

  function say_hello()

  {

    echo 'Hello World';

  }

}

?>

这是一个简单的Hello World插件,用于输出一句话。在实际情况中,say_hello可能包括对数据库的操作,或者是其他一些特定的逻辑,比如调用Akimet API。

插件实现的默认规则由核心系统开发者自行确定。比如本例的一些默认规则我在注释中已经写的很清楚,在此不在赘述。需要特别注意的是钩子名称不要重复。

最后一步,就是定义钩子的触发,你将钩子放在哪里,上面这个插件的方法就会在哪里出发。比如我要将say_hello放到我博客首页Index.php, 那么你在index.php中的某个位置写下:

$pluginManager->trigger('demo','');

第一个参数表示钩子的名字,在本例中它是demo;第二个参数是插件对应方法的入口参数,由于这个例子中没有输入参数,所以为空。

总结

本篇文章介绍了插件机制在PHP中实现的一种方法和思路,以及我本人对插件机制的理解。初次接触这个东西,可能会比较生涩,难以理解。但是当你结合真实的 例子,再想想程序的运行流程,思路可能会更清晰一些。如果大家还有任何补充可以联系黑区网络小编。