php 使用__call實現鉤子方法

來源:互聯網
上載者:User

我有一個大膽的想法,就是在某某方法執行前與執行後會自動執行某些函數,實現如下:

<?phpclass Hook {protected $targetClass;public function setTargetClass($classObj) {$this->targetClass = $classObj;}private function invoker($name, $arguments) {if(method_exists($this->targetClass, 'before_'.$name)) call_user_func_array([$this->targetClass, 'before_'.$name], $arguments);call_user_func_array([$this->targetClass, $name], $arguments);if(method_exists($this->targetClass, 'after_'.$name)) call_user_func_array([$this->targetClass, 'after_'.$name], $arguments);}public function __call($name, $arguments) {// TODO:Implemnt __call() method$this->invoker($name, $arguments);}}class Other {public function index($id) {echo "</br>".$id."</br>";}public function before_index($id) {echo 'other before index $id='.$id;}public function after_index($id) {echo 'other after index $id='.$id;}public function update($id) {echo "</br> update ".$id."</br>";}public function before_update($id) {echo 'other before update $id='.$id;}// public function after_update($id) {// echo 'other before after $id='.$id;// }}$hook = new Hook();$obj = new Other();$hook->setTargetClass($obj);$hook->index(1);echo "<hr>";$hook->update(1);

效果圖如下:



以上就是一個鉤子方法的簡單實現,具體可根據該執行個體變化出更多用法~~~




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.