旧闻 , PHP已经拿起了切刀
程序员文章站
2022-06-13 14:08:52
...
旧闻 , PHP已经拿起了切刀!
下面是群里诸位对PHP AOP扩展的讨论,还捎带对比了一下traits 。有浅显易懂的讲解,不要错过!
Rango(xxxxxxxx0) 17:47:02
http://pecl.php.net/package/AOP
|
Rango(xxxxxxxx0) 17:47:14
PHP AOP编程扩展
|
Rango(xxxxxxxx0) 17:47:16
很牛叉
|
令狐雨辰(xxxxxxxx2) 17:47:32
have a look
|
摘取天上星 17:48:09
look look~
|
Rango(xxxxxxxx0) 17:48:38
非侵入式编程,这个在设置框架时可以用起来
|
Rango(xxxxxxxx0) 17:48:42
设计框架
|
令狐雨辰(xxxxxxxx2) 17:49:36
这有点像 php5.4的 traits 呀
|
Rango(xxxxxxxx0) 17:50:03
不是一回事
|
令狐雨辰(xxxxxxxx2) 17:50:06
哦哦
|
令狐雨辰(xxxxxxxx2) 17:50:09
不是的
|
令狐雨辰(xxxxxxxx2) 17:50:11
不是的
|
令狐雨辰(xxxxxxxx2) 17:50:18
嗯这个确实很有用
|
令狐雨辰(xxxxxxxx2) 17:50:25
不过用PHP也能实现呀
|
令狐雨辰(xxxxxxxx2) 17:50:34
__call($name,$args) {
} |
令狐雨辰(xxxxxxxx2) 17:50:38
我都是这么搞的
|
令狐雨辰(xxxxxxxx2) 17:50:51
稍等秀一段代码
|
令狐雨辰(xxxxxxxx2) 17:51:58
|
Sango 17:58:19
AOP没有用过
简单看了下介绍,貌似通俗的讲 AOP提供了 watch 功能 这个确实可以玩出很多有用的花样 |
Rango(xxxxxxxx0) 17:59:25
不需要改变代码,就能实现各种功能特性
|
Rango(xxxxxxxx0) 17:59:46
实现代码注入
|
Sango 17:59:48
这个确实很厉害,透明的
|
令狐雨辰(xxxxxxxx2) 18:01:25
嗯,是的,做二次开发很方便。
|
令狐雨辰(xxxxxxxx2) 18:01:30
不用去hack原来的代码
|
凯旋(346157403) 18:01:44
实现代码注入
? |
Sango 18:01:52
说实话,超喜欢PHP的简洁
都是下面这两项很不舒服 $开头变量还得shift .被用来字符串连接 |
令狐雨辰(xxxxxxxx2) 18:02:10
就是你去call class.method的时候,先去执行一段其他的逻辑
|
Rango(xxxxxxxx0) 18:04:23
假设你的框架有一个 Frameworkd::init方法,就是初始化框架。如果现在有db,template的初始化也需要在这个阶段执行
|
Rango(xxxxxxxx0) 18:05:00
普通的做法就是只能修改 Frameworkd::init在里面加入 db,template的方法调用。这种做法是侵入性的
|
Rango(xxxxxxxx0) 18:05:24
假设以后增加了一个 cache模块,也要初始化,那还得修改 Frameworkd::init
|
Rango(xxxxxxxx0) 18:06:39
这个扩展也可以用hook list的方式来实现。但远没有AOP强大
|
Rango(xxxxxxxx0) 18:06:49
没有这个扩展
|
我就是我(xxxxxxxx6) 18:07:40
麻烦楼上,继续普及下,那AOP的流程是什么样的
|
令狐雨辰(xxxxxxxx2) 18:07:40
嗯。我觉得这个其实是个双刃剑吧,看用的人水平。
因为写这个类的人,他其实不清楚他这个类最终会被怎么用,用这种注入会不会引起他类内部其他的BUG。 |
令狐雨辰(xxxxxxxx2) 18:08:10
用得好了,框架可以写的很牛X,架构清晰简单。
|
令狐雨辰(xxxxxxxx2) 18:08:21
用得不好了,就是处处坑 : )
|
Sango 18:09:23
http://aop-php.github.com/
这个用到框架里面很有搞头 |
Sango 18:09:52
完全透明的,应用领域太大了
|
我就是我(xxxxxxxx6) 18:10:04
Rango, 麻烦你继续下说下刚才的Frameworkd::init问题。
如果用AOP,是怎么样来处理的 |
Sango 18:10:31
http://aop-php.github.com/ 里面有例子啊
完全透明的 |
Sango 18:10:46
|
Rango(xxxxxxxx0) 18:10:58
AOP就直接来个 aop_add_around
|
Sango 18:11:00
|
Sango 18:11:25
对于 class 来说 AOP完全都不存在
|
我就是我(xxxxxxxx6) 18:11:58
tks
|
Sango 18:12:28
这个比watch啥的更直接有效,这也许是脚本语言特有的工作方式
有效,简单,硬道理 |
令狐雨辰(xxxxxxxx2) 18:12:48
嗯,symfony为了实现这个,用了个很麻烦的方式。
|
令狐雨辰(xxxxxxxx2) 18:13:10
这个确实很好,回去试试看
|
令狐雨辰(xxxxxxxx2) 18:13:53
俺去推广一下
|
令狐雨辰(xxxxxxxx2) 18:13:55
: )
|
Sango 18:14:12
这东西2012年才有的啊,好东西好东西啊
感谢Rango啊 |
追麾(1372712268) 18:16:59
我在这里,点击查看:http://maps.google.com/maps?q=32.970565,112.549169&iwoc=A&hl=zh-CN (南阳市宛城区长江中路)
|
令狐雨辰(xxxxxxxx2) 18:17:02
这东东能不能对内置的类做AOP啊
|
令狐雨辰(xxxxxxxx2) 18:17:13
如果能的话,我就能做好多事儿了
|
追麾(1372712268) 18:17:16
手机QQ语音,点击收听http://ph.qq.com/8745758/4416202949962068766
|
我就是我(xxxxxxxx6) 18:19:04
感谢Rango,看了一下demo,大概理解了一个基本流程,有些hook的影子。
|
Rango(xxxxxxxx0) 18:19:30
: )
|
Rango(xxxxxxxx0) 18:19:41
时常关注pecl.php.net
|
令狐雨辰(xxxxxxxx2) 18:19:43
|
令狐雨辰(xxxxxxxx2) 18:19:48
果然是强的一B
|
令狐雨辰(xxxxxxxx2) 18:20:02
这样统计QUERY时间,就很容易啦
|
令狐雨辰(xxxxxxxx2) 18:20:19
所有socket请求的,都能轻松统计到
|
PHP-干不明白 18:20:38
?
|
令狐雨辰(xxxxxxxx2) 18:20:56
比如你用 memcache.get
|
令狐雨辰(xxxxxxxx2) 18:21:04
带宽满的时候,
|
令狐雨辰(xxxxxxxx2) 18:21:12
你默认设置下,会block住
|
PHP-干不明白 18:21:23
是
|
令狐雨辰(xxxxxxxx2) 18:21:24
你可以在get前后加一个切面
|
令狐雨辰(xxxxxxxx2) 18:21:29
统计这个时间
|
令狐雨辰(xxxxxxxx2) 18:21:38
一旦大于某个阈值,就上报
|
PHP-干不明白 18:21:47
怎么加
|
令狐雨辰(xxxxxxxx2) 18:21:56
看demo被。。。
|
Sango 18:22:00
在php热部署的能力下,加上xdebug,这玩意要逆天了
|
PHP-干不明白 18:22:02
?
|
PHP-干不明白 18:22:10
共享啊
|
令狐雨辰(xxxxxxxx2) 18:22:15
https://github.com/AOP-PHP/AOP
|
令狐雨辰(xxxxxxxx2) 18:22:24
就刚讨论的这个呀
|
PHP-干不明白 18:22:33
o
|
Sango 18:22:49
热部署真是个银弹啊
|
微信 声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。 相关文章 相关视频
专题推荐
|
下一篇: oracle游标循环和时间函数实例
推荐阅读
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论