由于php不能动态修改类和对象的方法,实现aop就变得很困难。网上看到过用__get, __set, __call来实现的办法。这个我以前也想过。但这种办法也有很大的缺点。如果能够用 runkit 扩展,就好很多了。下面是个用 runkit 来实现方法调用拦截的例子。
class Target {
function add($a, $b){
echo $a + $b."\n";
}
}
runkit_method_rename('Target', 'add', '#add');
例:
runkit_method_add('Target','add','$a,$b','
echo "before call\n";
$ret = $this->{"#add"}($a,$b);
echo "after call\n";
return $ret;
');
$t = new Target;
$t->add(1, 3);
runkit Functions
没有评论:
发表评论