php7菜鸟教程
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术利用 AOP 可以对业务逻源码辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等主要的意图是:将日志记录,性能源码统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
PHP 实现PHP 源码的原生内核并没有相关的实现,不过借助魔术函数可以近似实现下面的代码主要实现了对实现了对业务类的包装:定义了两个层次的前置和后置函数:可以全局的(类层面的所有 action),也可以局部的(对某个 ac源码tion 的)允许继承。
代码如下:/*** 业务逻辑类的包装类* *执行顺序:* 1.全局前置函数* 2.局部前置函数* 3.业务逻辑* 4.局部后置函数* 5.全局后置函数* *@author */源码final class AOP{ private $instance;//全局的前置函数和后置函数//每个action调用时都会调用//@todo 可以在配置文件配置 const GLOBALBEFO源码REFUNC =before; const GLOBALAFTERFUNC =after;//特定action的前置函数和后置函数的前缀 const LOCALBEFOREPRE =before; c源码onst LOCALAFTERPRE =after; public function construct($instance){ $this->instance =$instance;} public源码 function call($method,$params){ if (!$this->hasMethod($method)){ throw new Exception("Call undefind源码ed method ". getclass($this->instance). "::$method");} //调用全局前置函数 if ($this->hasMethod(AOP::GLOBALBE源码FOREFUNC)){ $this->callMethod(AOP::GLOBALBEFOREFUNC);} //调用前置函数 if ($this->hasMethod(AOP::LOCALBEFOR源码EPRE .$method)){ $this->callMethod(AOP::LOCALBEFOREPRE .$method);} //调用业务函数$return =$this->callMetho源码d($method,$params);//调用局部后置函数 if ($this->hasMethod(AOP::LOCALAFTERPRE .$method)){ $this->callMethod(源码AOP::LOCALAFTERPRE .$method);} //调用全局后置函数 if ($this->hasMethod(AOP::GLOBALAFTERFUNC)){ $this->callMe源码thod(AOP::GLOBALAFTERFUNC);} return $return;} /*** 判断方法是否存在* 使用双下划线前缀主要是为了避免冲突* @param string $metho源码d 方法名* @return mixed */ private function hasMethod($method){ return methodexists($this->instance,$me源码thod);} /*** 调用方法* @param string $method 方法名* @param array $params 参数数组* @return mixed */ private fu源码nction callMethod($method, array $params = null){ $callBack = array($this->instance,$method ); if (n源码ull ===$params){ return calluserfunc($callBack);} else { return calluserfuncarray($callBack,$params)源码;} }}
源码文件:wget https://github.com/cyy0523xc/code/raw/master/php/test/aop.php -O aop.php
亲爱的读者们,感谢您花时间源码阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。