<?php
class Ball {
public function down() {
//注册事件
echo "ball is downing ";
Hook::add("man");
Hook::add("Women");
}
public function do() {
Hook::exec();
}
}
// 钩子的定义
class Hook {
private $hooklist = null;
// 添加
public function add($people) {
$this->hooklist[] = new $people();
}
// 触发事件
public function exec() {
foreach ($this->hooklist as $people) {
$addon->act();
}
}
}
// 钩子实现
class man {
public function act() {
echo 'notiong';
}
}
class WoMan {
public function act() {
echo 'oh my god ';
}
}
class child {
public function act() {
echo 'oh my god ';
}
}
$ball = new Ball();
$ball->down();
$ball->do();
class Hook {
private $hookList;
//添加
function add($name, $fun) {
$this->hookList[$name][] = $fun;
}
function excec($name) {
$value = func_get_args();
unset($value[0]);
foreach ($this->hookList[$name] as $key => $fun) {
call_user_func_array($fun, $value);
}
}
}
$hook = new Hook();
$hook->add('women', function ($msg) {
echo 'oh my god' . $msg;
});
$hook->add('man', function ($msg) {
echo 'nothing' . $msg;
});
// 执行
$hook->excec('man', 'taoge');
$hook->excec('women', 'xxx');
?>