您的位置:首页 > 编程语言 > PHP开发

PHP的钩子实现解析

2016-08-25 14:55 369 查看
我们想的是写一个类(通过这个类,向系统发送信息的时候,系统可以直接调用我们的类,而且我们的类只要遵循一定的规则设计,直接和原系统是相容的)。做了改进设计出如下钩子格式:

 <?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继承这个抽象类,就可以直接写个扩展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: