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();
代码示例二:
// 假如需要增加小孩,就可以做增加一个小孩Hook::add("child"); /*=========================钩子的升级版============================================/* 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');
引荐教程:PHP教程
以上就是PHP中钩子的懂得与实例教程的具体内容,更多请关注百分百源码网其它相关文章!