PHP的钩子实现解析

来源:互联网 发布:手机怎么注册淘宝网 编辑:程序博客网 时间:2024/06/06 12:54

我们想的是写一个类(通过这个类,向系统发送信息的时候,系统可以直接调用我们的类,而且我们的类只要遵循一定的规则设计,直接和原系统是相容的)。做了改进设计出如下钩子格式:
 <?php
  class   Test   {
public  static  function   example() {
   Hook::exec("string");
   echo    "hello<br />";
   Hook::exec("arr");
}
}
class  Hook  {
 static  public function  exec($type,$model=' ') {
      if($model=' ') {
         $m = new hello();
      }  else {
       $m = new $model();
 }
      
    if($type=='string') {     
        $m->string();
    }  elseif($type=='arr') {
      
        $m->arr();    
    }
}
}
//我们只要改动一个外部的hello类 就可以实现对系统内部的控制了。
class   hello  {
 public  function  string() {
     $str="I am a Hook test<br />";
    echo   "$str <br />";
 }
public  function arr() {
    $arr =array(1,2,3,4,5,6);
   echo   "<pre>";
   print_r($arr);
   echo    "</pre>";
}
}
Test::example();
?>
从上面可以看出,组成一个单独的类,系统内部的实现固定了后。外部可以写各种类,进行钩子的实现,现在写了一个hello类。假如增加一个拓展world类
同样可以仅仅改动Hook,而不用去改动Test系统内部,只要我们定义一个抽象类
abstract  class  lan {
  abstract  function  string() ;
  abstract function arr();
}
然后让所有的扩展类,比如hello或者另外写个类world继承这个抽象类,就可以直接写个扩展。

0 0
原创粉丝点击