PHP简单拦截器的实现
最近在看Yii的源代码,收获了不少,这里就是从中得到的启发,而写的一个简单拦截器的实现下面看例子:
1 <?php 2 class A{ 3 private $_e = array(); 4 5 public function attachEvent($name,$handle){ 6 $this->_e[$name] = $handle; 7 } 8 9 public function raiseEvent($name){ 10 call_user_func($this->_e[$name]); 11 } 12 13 public function action(){ 14 $this->raiseEvent("befor"); 15 echo "hahaha"; 16 $this->raiseEvent("after"); 17 } 18 } 19 20 function beforAction(){ 21 echo "befor action"; 22 } 23 24 function afterAction(){ 25 echo "after action"; 26 } 27 28 29 $a = new A(); 30 $a->attachEvent("befor", "beforAction"); 31 $a->attachEvent("after", "afterAction"); 32 33 $a->action();
这里思路蛮好的,可以在任何你想调用的函数前调用自己的拓展的功能,Yii里面的拦截器就是这么实现的。这里的event你可以添加N个,我为了让人更易懂,就没有拓展。