AOP FOR PHP 探讨----runkit

来源:互联网 发布:亲权鉴定软件 编辑:程序博客网 时间:2024/06/06 07:50

AOP FOR PHP 探讨----runkit

runkit扩展库是pecl的php扩展的一部分, 最近两天在用这个东西尝试实现无侵入式的AOP。
runkit提供了一套函数,能让你动态的修改任意类和函数的定义。根据php提供的反射机制,得到所有用户定义的类和函数,你可以把他们重命名然后再用原来的函数名/方法名重新添加一个方法/函数,重新添加的函数的函数体,你可以任意定义---用字串儿,当你的php脚本开始执行时,你要最先调用你设计的这个“钩子”,把所有的类的方法或函数都"钩"一遍,这样,不管是哪个方法在执行的时候,都会执行到你提供的切入点上的代码.
不过,在使用runkit的时候,还遇到一个问题:就是大小写的问题,起初,在“钩”方法的时候,有的方法带有大写字母,通过反射得到的方法名也是区分大小写的,但是,应该在php解析执行函数的时候,还是把所有方法名或函数名都转换成了小写,这样,在用runkit提供的动态添加方法的函数添加方法时,也忠实方法原来的命名,带着大写字母就直接添进去了,结果,再调用被钩的方法的时候,报错,死活也找不着原来的那个方法了,原因应该就是,php在解析执行类、方法、函数时,应该都是按小写形式来定位的方法和函数的,而用runkit直接添加进去的带有大写字母的函数,自然就会找不到,所以,在用runkit添加方法的时候,要把方法名都转换成小写,这样php就可以找到这个方法了,函数应该也是同样的.
 
另外,重命名的办法并不是最好的,因为,类中如果已经存在同样命名的方法,那么你在重命名方法名的时候就会出错。除非在开发时规定方法命名中不能用某某关键字命名。但这样确实不好,作为一个开发框架,是不应该给开发者很多的限制的。所以,比较理想的AOP FOR PHP还是继续探索中!!!!
原创粉丝点击