变量封装,Set/Get方法是最佳实践,但为什么我们有机会声明一个变量public,如果它不打算被使用呢?如果变量总是默认为私有的,没有机会让它们公开,那么它会更好吗?因为我读过的所有教程都说它们应该用set/get方法封装起来?至少在PHP OOP中是否有公共变量的有效用例?在PHP OOP中使用公共变量是否有任何有效用例?
7
A
回答
8
事实上,它只是另一种方式:理论上,获取者/设置者是错误。这些属性定义了一个对象的状态,这些方法定义了行为。 Getters/Setter只拦截对属性的读写访问,但它们完全破坏语义:现在读取对象的状态是对象的行为。
为了让性能的样子性质又存在道路:) https://wiki.php.net/rfc/propertygetsetsyntax
1
设置在RFC/Get方法是最好的做法,但为什么我们有机会来声明一个变量市民如果它是不是意味着要用吗?
最佳实践和不打算使用的是不一样的。一种语言需要为不同的使用情况提供不同的工具,并且应该一致。
PHP对象始终支持公共成员,并且在引入差异可见性时,出于向后兼容的原因,公共成员非常有用。
如果变量总是默认为私有的,没有机会让它们公开,那么会更好吗?因为我读过的所有教程都说它们应该用set/get方法封装?
这个问题不能具体回答,这太主观了,太多不同的用例会导致不同的答案。
至少在PHP OOP中是否有公共变量的任何有效用例?
开始向后兼容。如果你不能重构你的代码,但需要一直重写它,这将是非常昂贵的。
-1
让我们来看看.. 这是一个真实世界的电子邮件API类CakePHP EmailComponent。使用这个类,你只需要在“设置”部分物业然后就send()
$this->Email->to = '[email protected]';
$this->Email->from = '[email protected]';
$this->Email->title = 'xxx';
$this->Email->msg = 'blabla..';
$this->Email->send();
其实有很多这样的类中私有属性和功能,但它是私有的。
类有(单一)责任做某事。 封装仅公布人们用来做这件事情,并保持技术/基础设施内部为私人。
相关问题
- 1. OOP公共变量问题
- 2. 是否有用于私有公共虚拟方法的用例?
- 3. 在公共属性获取器中使用私有变量
- 4. 如何检查URL是否具有有效的公共TLD?
- 5. 如何在扩展类公共变量中使用变量
- 6. 使用“私人”变量+方法v.s. “公共”的实例变量
- 7. Javascript中是否有任何类似于PHP中的__FILE__变量?
- 8. 是否有可能在PHP中使用JavaScript的变量?
- 9. 如何使用Moose创建私有/公共变量和函数?
- 10. 在Couchbase PhoneGap中使用REST API是否有任何示例
- 11. 私有静态变量是否需要公共setter?
- 12. 当使用单例模式时,我的公共类是否应返回私有或公共实例?
- 13. 是否有任何公共API使用JavaScript访问当前时间戳?
- 14. 是否有任何工具可以从一组C文件中提取所有变量(公共和静态)?
- 15. 是否有可能解析JavaScript中的对象的所有公共变量?
- 16. 如何检查变量是否包含使用PHP和jQuery的有效URL?
- 17. 是否有用于PHP中的矢量QR码的任何库
- 18. PHP OOP - 使用var_dump从外部类访问私有变量?
- 19. 是否有任何图像托管服务与公共API?
- 20. 是否有任何WebGL的公共规范?
- 21. 是否有任何泛型版本的Apache公共对象池?
- 22. 如何在公共方法中使用私有方法来检查有效性?
- 23. 是否有任何具体原因背后在jQuery中使用$与变量
- 24. 是否有任何有意义的用例将未定义的变量赋值给变量?
- 25. 如何判断一个变量在PHP类中是公有还是私有?
- 26. PHP是否有效回显一个不存在的变量?
- 27. 使用get_object_vars()更新类的所有公共变量的值
- 28. 试图找到我的PHP变量是否有任何内容
- 29. PHP检测是否有任何URL变量已设置
- 30. 方法体中是否有静态变量由所有实例共享
有用于保护变量的类(例如继承/覆盖),但我不知道任何公共的。这可能是由于在PHP 5中被解释为public的类中的php 4 var $ var声明造成的。 – Hajo 2012-04-20 11:29:45
简单的答案:因为** not **(wanting)使用getters和setters有各种完全有效的理由,所以你可以简单地访问公共变量。 – CodeCaster 2012-04-20 11:30:51
@CodeCaster在大多数情况下的动态oop显示我认为不好的设计。 – Hajo 2012-04-20 11:32:33