在PHP OOP中使用公共变量是否有任何有效的用例?

在PHP OOP中使用公共变量是否有任何有效的用例?,php,oop,variables,getter-setter,Php,Oop,Variables,Getter Setter,变量封装、Set/Get方法是最佳实践,但如果变量不打算使用,为什么我们有机会将其声明为public呢?如果变量在默认情况下始终是私有的,并且没有机会公开它们,这会更好吗?因为我读过的所有教程都说它们应该用set/get方法封装?至少在PHP OOP中,是否存在公共变量的有效用例?事实上恰恰相反:理论上getter/setter是错误的。属性定义对象的状态,其中方法定义行为。getter/setter只截获对属性的读写访问,但它们完全破坏了语义含义:现在读取对象的状态是对象的一种行为 要使属性再

变量封装、Set/Get方法是最佳实践,但如果变量不打算使用,为什么我们有机会将其声明为public呢?如果变量在默认情况下始终是私有的,并且没有机会公开它们,这会更好吗?因为我读过的所有教程都说它们应该用set/get方法封装?至少在PHP OOP中,是否存在公共变量的有效用例?

事实上恰恰相反:理论上getter/setter是错误的。属性定义对象的状态,其中方法定义行为。getter/setter只截获对属性的读写访问,但它们完全破坏了语义含义:现在读取对象的状态是对象的一种行为

要使属性再次看起来像属性,道路上有一个RFC:)

Set/Get方法是最佳实践,但是如果变量不打算使用,为什么我们有机会声明它为public呢

最佳做法和不打算使用的做法是不一样的。一种语言需要为不同的用例提供不同的工具,并且应该是一致的

PHP对象始终支持公共成员,当引入差异化可见性时,出于向后兼容的原因,公共成员非常有用

如果变量在默认情况下始终是私有的,并且没有机会公开它们,这会更好吗?因为我读过的所有教程都说它们应该用set/get方法封装

这个问题无法具体回答,它太主观了,有太多不同的用例会导致不同的答案

至少在PHP OOP中有公共变量的有效用例吗

从向后兼容开始。如果您不能重构代码,但需要一直完全重写,这将非常昂贵。

让我们看看。。 这是一个真实的电子邮件API类。要使用这个类,您只需要“设置”一些属性,然后只需
send()

事实上,这个类中有很多私有属性和函数,但它是私有的

班级有(单一)责任做某事。
封装就是只发布人们用来做这件事的东西,并将技术/基础设施作为私有的

类中有受保护变量的用例(例如继承/覆盖),但我不知道公共变量的任何用例。这可能是由于类中的PHP4 var$var声明在PHP5中被解释为公共的。简单的回答是:因为(不想)使用getter和setter有各种非常有效的理由,所以您可以简单地访问公共变量。@CodeCaster在大多数动态oop中,我认为这显示了糟糕的设计。这只是一个RFC,但我希望它是在PHP5.5:)@KingCrunch中,这个链接可以说是这个问题的最佳答案,因为它准确地概括了OP所问问题的优缺点。
$this->Email->to = 'ss@b.co';
$this->Email->from = 'me@b.co';
$this->Email->title = 'xxx';
$this->Email->msg = 'blabla..';
$this->Email->send();