PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知
生活随笔
收集整理的這篇文章主要介紹了
PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*** person class*/
class Person {/*** person class -> function say*/public static function say($i){echo "hi-->";var_dump($i);//return "hi";
}}
class Dog{public function say(){echo "wang !";}
}
?
APO的主要思路 (__call魔術方法:調用一個沒有的方法時執行)
interface Monitor{public function __construct($class);public function __call($name, $arguments); }abstract class Event{public abstract function before();public abstract function after(); }class MonitorBase implements Monitor{private $classes = null;public function __construct($class){$this->classes=$class;}public function __call($name, $arguments){echo "前置輸出";echo $name;call_user_func(array($this->classes,$name),$arguments);echo "后置輸出";} }?
測試 :
$p = new MonitorBase(new Person()); $p->say("888",'666',array(1,2,3,65,4));$d = new MonitorBase(new Dog()); $d->say();?
結果:
?
?
最后:細心的讀者可能注意到 抽象類Event 沒有用到
這個其實可以讓?Person 和Dog 繼承然后重寫?before()和after(),這樣每一個類都有自己的前置和后置通知了...
?
轉載于:https://www.cnblogs.com/fps2tao/p/9913722.html
總結
以上是生活随笔為你收集整理的PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018.11.05 NOIP模拟 规避
- 下一篇: 1. 各种虚拟机的发展历史