tp(php)插件(钩子)的简单实现机制
浏览量:147
namespace hook;
class Hook{
static protected $hook = [];
/**
* 插件注册
* @param [type] $name [description]
* @param [type] $addons [description]
*/
static public function add($name,$addons){
self::$hook[$name] = $addons;
}
/**
* 插件执行
* @param [type] $name [description]
* @return [type] [description]
*/
static public function run($name){
if(isset(self::$hook[$name])){
$method = (new self::$hook[$name]());
call_user_func([$method,$name]);
}
}
}
简单的插件demo:
namespace addons\demo;
class Demo{
public function registerBefore(){
echo 'registerBefore'.'</br>';
}
public function registerAfter(){
echo 'registerAfter'.'</br>';
}
}
插件实现的地方
namespace index\controller;
use hook\Hook;
class Index{
public function index(){
Hook::run('registerBefore');
echo '注册完成'.'</br>';
Hook::run('registerAfter');
}
}
入口文件index.php
use index\controller\Index;
spl_autoload_register('autoload');
function autoload($name){
require_once('/'.str_replace('\\','/',$name).'.php');
}
//插件注册
hook\Hook::add('registerBefore','\\addons\\demo\\Demo');
hook\Hook::add('registerAfter','\\addons\\demo\\Demo');
//调用
$index = new Index();
$index->index();


感谢支持与鼓励~