为什么属性请求/查询/属性/…在Symfony2中是公共的?

| 为什么不吸气剂?以及如何与封装原理结合使用?安全吗? 更新: 是的,我大约是
Request
。安全:我的意思是代码中的任何人(通过使用侦听器)都可以做
$request->attributes = null;
    
已邀请:
如果您在谈论Request和Response对象,那么几天前Symfony开发人员邮件列表中就对此进行了讨论。我邀请您在这里看看。 为什么不吸气剂?不确定是否有明确的答案,但我认为这主要是根据个人喜好做出的决定。 它会破坏封装吗?在我看来,这种情况并非如此。我的理由是,到目前为止,目前尚未对各种公共对象执行任何特殊的逻辑。因此,最后,您将最终通过getter检索对象并直接读取或修改它。使用公共属性检索对象没有太大区别。
// With Getters
$parameterBag = $request->getQuery();
$parameterBag->get(\'key\');

// With Public Properties
$parameterBag = $request->query;
$parameterBag->get(\'key\');
当您需要确保属性具有特定的值或格式时,应强制执行封装。例如,假设您有一个带有cost属性的类,并且此属性永远不能为负。因此,如果成本属性是公共的,则可以通过执行“ 3”之类的操作将其设置为负值。但是,如果将其设为私有,并且该类的用户只能通过设置器进行设置,则可以通过在设置器代码中进行一些特殊的验证来确保成本永远不会低于0。 在我们的例子中,我们正在谈论一个收集对象,确切地说是一个ParameterBag对象。我认为对此对象没有特殊要求,但我可能是错的。因此,对我来说,通过公共属性访问那些属性是正确的。 我可以看到支持getter的主要论点是,它将与使用getter的框架的其他部分更加一致。但是,吸气剂可以与公共财产共存。 总而言之,我认为这种特殊情况是安全的。仅在似乎有益且正确的特殊情况下,才应使用公共财产。     
您的意思是请求对象吗?或者您在考虑什么属性? 如果您担心安全性,请查看“安全性”组件,使用“测试驱动开发”,使用经过测试的库(不要发明自己的身份验证,加密技术和相关解决方案)并进行代码审查。     
封装已经封装的内容有什么意义?我的意思是-每个属性都是带有封装的parameterBag实例。     

要回复问题请先登录注册