2008年11月6日星期四

php下AOP的一个实现办法

 由于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

没有评论:

发表评论

网站统计