下面是群里诸位对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 |
摘取天上星<[email protected]> 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<[email protected]> 17:58:19 AOP没有用过 简单看了下介绍,貌似通俗的讲 AOP提供了 watch 功能 这个确实可以玩出很多有用的花样 |
Rango(xxxxxxxx0) 17:59:25 不需要改变代码,就能实现各种功能特性 |
Rango(xxxxxxxx0) 17:59:46 实现代码注入 |
Sango<[email protected]> 17:59:48 这个确实很厉害,透明的 |
令狐雨辰(xxxxxxxx2) 18:01:25 嗯,是的,做二次开发很方便。 |
令狐雨辰(xxxxxxxx2) 18:01:30 不用去hack原来的代码 |
凯旋(346157403) 18:01:44 实现代码注入 ? |
Sango<[email protected]> 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<[email protected]> 18:09:23 http://aop-php.github.com/ 这个用到框架里面很有搞头 |
Sango<[email protected]> 18:09:52 完全透明的,应用领域太大了 |
我就是我(xxxxxxxx6) 18:10:04 Rango, 麻烦你继续下说下刚才的Frameworkd::init问题。 如果用AOP,是怎么样来处理的 |
Sango<[email protected]> 18:10:31 http://aop-php.github.com/ 里面有例子啊 完全透明的 |
Sango<[email protected]> 18:10:46 |
Rango(xxxxxxxx0) 18:10:58 AOP就直接来个 aop_add_around |
Sango<[email protected]> 18:11:00 |
Sango<[email protected]> 18:11:25 对于 class 来说 AOP完全都不存在 |
我就是我(xxxxxxxx6) 18:11:58 tks |
Sango<[email protected]> 18:12:28 这个比watch啥的更直接有效,这也许是脚本语言特有的工作方式 有效,简单,硬道理 |
令狐雨辰(xxxxxxxx2) 18:12:48 嗯,symfony为了实现这个,用了个很麻烦的方式。 |
令狐雨辰(xxxxxxxx2) 18:13:10 这个确实很好,回去试试看 |
令狐雨辰(xxxxxxxx2) 18:13:53 俺去推广一下 |
令狐雨辰(xxxxxxxx2) 18:13:55 : ) |
Sango<[email protected]> 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-干不明白<[email protected]> 18:20:38 ? |
令狐雨辰(xxxxxxxx2) 18:20:56 比如你用 memcache.get |
令狐雨辰(xxxxxxxx2) 18:21:04 带宽满的时候, |
令狐雨辰(xxxxxxxx2) 18:21:12 你默认设置下,会block住 |
PHP-干不明白<[email protected]> 18:21:23 是 |
令狐雨辰(xxxxxxxx2) 18:21:24 你可以在get前后加一个切面 |
令狐雨辰(xxxxxxxx2) 18:21:29 统计这个时间 |
令狐雨辰(xxxxxxxx2) 18:21:38 一旦大于某个阈值,就上报 |
PHP-干不明白<[email protected]> 18:21:47 怎么加 |
令狐雨辰(xxxxxxxx2) 18:21:56 看demo被。。。 |
Sango<[email protected]> 18:22:00 在php热部署的能力下,加上xdebug,这玩意要逆天了 |
PHP-干不明白<[email protected]> 18:22:02 ? |
PHP-干不明白<[email protected]> 18:22:10 共享啊 |
令狐雨辰(xxxxxxxx2) 18:22:15 https://github.com/AOP-PHP/AOP |
令狐雨辰(xxxxxxxx2) 18:22:24 就刚讨论的这个呀 |
PHP-干不明白<[email protected]> 18:22:33 o |
Sango<[email protected]> 18:22:49 热部署真是个银弹啊 |
令狐雨辰(xxxxxxxx2) 18:25:08 这个现在还有些BUG https://github.com/AOP-PHP/AOP/issues 等个稳定版,直接用上。 |
Rango(xxxxxxxx0) 18:25:15 统计执行时间也可以用AOP,before前记录一个时间,after再记录一个 |
令狐雨辰(xxxxxxxx2) 18:25:50 嗯是的。总之确实是很有用。 |
Rango(xxxxxxxx0) 18:26:12 |
Rango(xxxxxxxx0) 18:26:18 更新还是挺及时的 |
令狐雨辰(xxxxxxxx2) 18:26:27 哈我刚也看得这个 |
PHP-干不明白<[email protected]> 18:26:46 外国人 就是牛b |