新人对于 PHP symfony2 的一些概念不是很清楚

2017-06-28 14:06:01 +08:00
 misinibaba

1.event 的概念,比如在什么场景下会用到 event ? 2.监听的概念,同样是不清楚什么应用场景用到监听会比较好 3.DI (注入)的概念,是在需要用到的时候引入该服务吗?那跟一般的公共函数有什么区别呢?

1656 次点击
所在节点    PHP
4 条回复
cxbig
2017-06-28 21:10:03 +08:00
如果有一个复杂的工作流程,若干组件参与其中,那么在特定环节设置 Event,相当于告诉大家执行到哪一步了。
其他的组件如果要在该环节参与到流程中去做一些工作,那么就用 Listener 监听该 Event。
这样的设计是用来去耦合,你可以随时关闭一个旁路组件而不用改流程代码。

注入是 OOP 的新概念,运用上比继承更灵活,核心组件定下一个蓝图、制定接口 API,具体的实施由下游组件来决定。
cxbig
2017-06-28 21:11:09 +08:00
关于 PHP-DI 可以看看这个
http://php-di.org/doc/understanding-di.html
bombless
2017-07-05 01:50:21 +08:00
注入一般是用来解耦的,让被依赖的和依赖的都能重新组合。否则就变成了客户代码要去依赖服务代码暴露的协议。

实际使用中 php 做不到强制只用一个协议,所以我感觉就真的变成了只是一种约定了……
当然 ide 也可以在这里起到强制约定的作用……配合文档注释
另外借助代码生成倒是可以实现说强制用一个协议的……
bombless
2017-07-05 01:58:57 +08:00
噗,看了 cxbig 的链接想起来,di 也起到解耦依赖之间的依赖的问题
感觉和包管理器有点像吧,根据名字把服务(库)链接起来
另外也有点像值构造器? 233。
想起来重构这本书有个地方吐槽说 java 里面构造器构造一个值总是需要定死构造出的值的类型这点很傻逼,这个也是 di 解决的一个点吧,就是根据一定的约束构造出一个值,但是不确定值的具体类型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371665

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX