感谢这两篇文章:
https://www.cnblogs.com/xpbb/p/3282829.html
https://www.cnblogs.com/baochuan/archive/2012/08/22/2644529.html
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
<?php
//比如下面这个,不用修改User类中的代码,也能在执行User类方法的时候,写入日志
class User
{
private $name;
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
}
class Log
{
private $obj;
function __call($method, $arguments)
{
echo "$method (".join(",",$arguments).")"."\n";
$cron = call_user_func_array([&$this->obj, $method],$arguments);
return $cron;
}
public function __construct($obj)
{
$this->obj = $obj;
}
}
$cl = new Log(new User());
$cl->setName('Winner');
$name = $cl->getName();
echo $name;