新在Symfoob娱乐下载ny 5.1:自动装配公共类型的属性
2020年3月10日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
提供的
Sebastien龙葵
在# 34769。
类型属性在PHP 7.4中引入的,PHP添加的最重要的一个功能。在Syob娱乐下载mfony 5.1我们实现基于这些新特性,如提取输入属性信息使用PropertyInfo组件。
考虑一下这个例子使用类型的属性:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用嫩枝\环境;类SomeServiceClass{/ * *@ required* /公共环境美元嫩枝;公共函数someMethod(){美元这- >嫩枝- >呈现(“……”);/ /……}}
在以前的Symfony版ob娱乐下载本,这个例子就不会因为树枝服务工作不是正确的注射。在Syob娱乐下载mfony 5.1中,这个示例将正常工作。原因在于,ob娱乐下载Symfony 5.1自动装配的所有公共属性与类相关的服务类型,其中包括@ required
注释。
一些事情需要考虑:
- 只有公共属性是autowired的;保护和私有财产将永远不会autowired的,以避免任何混淆行为;
- 这是实际上相当于setter注入,缺点它应该使用仅在非常特殊的情况。
这个新功能只是其中的一种工具,Symfony提供了自动化的配置应该如何创建服务/对象。ob娱乐下载如果它不适合你的方式开发应用程序时,可以继续使用传统的基于构造函数和私人服务注入属性。
发表在#生活在边缘
评论
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
https://en.wikipedia.org/wiki/Encapsulation_ (computer_programming)
@Martin我猜这是可能的,虽然我不认为这样做是一个很好的主意,因为它影响其他实例的“状态”的服务。
我们不建议任何人在文档中使用setter注入,所以我们也不会重写所有的例子使用autowired的公共属性。
这是建立在这样的观点,贡献是总体规划。事实并非如此:ppl提供他们想要的东西。
>为什么Syob娱乐下载mfony是添加一个功能,显然是一个糟糕的做法
就是这么一个糟糕的实践使用setter,然而setter只是正确的解决一些问题。相同:它不是Symfony的角色决定什么ob娱乐下载应该是可能的。DI容器来线ppl写的代码,这是一个可能的。这是所有人……
我理解你的第二点。
反对和其他人一样,这不是叫注释@ inject更好。
我认为这是一个巨大的进步在可读性,但我可以理解为什么人们关心“封装”。最后,我们总是使用一个类属性来存储注入服务但它很快就会是一片混乱,如果服务是与其它属性。
你认为可以从配置启用它,或使一个只有注释属性autowired的混合动力版,一个注释“@Autowire”例如吗?