为什么不吸气?它是如何与封装原理相结合的?它安全吗?
UPD:
是的,我是Request
。安全性:我的意思是代码中的任何人(使用监听器)都可以$request->attributes = null;
答案 0 :(得分:1)
如果您正在谈论Request和Response个对象,那么几天前就会在Symfony开发者邮件列表上讨论这个问题。我邀请你看一下here。
为什么不吸气?不确定是否有明确的答案,但我认为这是一个主要基于个人品味的决定。
它会破坏封装吗?对于这个特殊情况,我不认为。我的理由是,目前,对于现在公开的各种对象没有特殊的逻辑。因此,最后,您最终将通过getter检索对象并直接读取或修改它。使用公共属性检索对象没有太大区别。
// With Getters
$parameterBag = $request->getQuery();
$parameterBag->get('key');
// With Public Properties
$parameterBag = $request->query;
$parameterBag->get('key');
当您需要确保属性具有特定值或格式时,应强制执行封装。例如,假设您有一个具有成本属性的类,并且此属性永远不应为负数。因此,如果成本属性是公开的,则可以通过执行$receipt->cost = -1;
之类的操作将其设置为负值。但是,如果您将其设为私有且类的用户只能通过setter设置它,那么您可以通过在setter代码中进行一些特殊验证来确保成本永远不会低于0。
在我们的例子中,我们讨论的是一个集合对象,一个精确的ParameterBag对象。我不认为这个对象有特殊要求,但我可能错了。所以对我来说,通过公共属性访问这些属性是正确的。
我可以看到支持getter的主要论点是它将与使用getter的框架的其他部分更加一致。但是,吸气者可以与公共财产共存。
总而言之,我认为这种特殊情况是安全的。公共财产应仅在特殊情况下使用,而这种情况似乎是有益的,并且这样做是正确的。
答案 1 :(得分:0)
你的意思是Request对象吗?或者你在想什么属性?
如果您担心安全问题,请查看Security组件,使用测试驱动开发,使用经过测试的库(不要发明自己的身份验证,加密和相关解决方案)并执行操作代码评论。
答案 2 :(得分:0)
封装已封装的内容有什么意义?我的意思是 - 每个属性都是一个带有封装的parameterBag实例。