当前位置:Gxlcms > PHP教程 > 旧闻,PHP已经拿起了切刀

旧闻,PHP已经拿起了切刀

时间:2021-07-01 10:21:17 帮助过:18人阅读

旧闻 , PHP已经拿起了切刀!

下面是群里诸位对PHP AOP扩展的讨论,还捎带对比了一下traits 。有浅显易懂的讲解,不要错过!

Rango(xxxxxxxx0) 17:47:02

http://pecl.php.com/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



PHP AOP



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.com

令狐雨辰(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

热部署真是个银弹啊

人气教程排行