Home >Backend Development >PHP Tutorial >旧闻 , PHP已经拿起了切刀

旧闻 , PHP已经拿起了切刀

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-13 11:16:231193browse

旧闻 , 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 


PHP AOP


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 
热部署真是个银弹啊
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn