好吧,这真的让我感到困扰,我开始认为这一切都归结为个人选择,而不是一种更高效或编写更好代码的特定方式:我应该还是不应该使用getter/setter方法PHP项目?到目前为止,我读过的答案相当矛盾,并不完全适用于PHP,它不是一种编译语言。例如,在Stack Overflow上采取这个问题(“Why use getters and setters?”)。关于为什么我应该在我的代码中使用它们,有很多很好的理由,但是所有孩子的评论都提到了如何避免,并且在几个更令人不安的评论之间穿插,这些评论提到应该完全避免它们,因为它“你的代码“。我应该还是不应该使用getter和setter方法?
我得到的所有答案都是相互矛盾的,其中没有一个与解释的PHP环境相关。是否有人能够明白为什么/为什么不应该在PHP中使用它们,以及它们背后的理由?是否真的重要,如果我们可以简单地定义一个属性为私有或保护,而且反正:
封装getter和setter报价是可笑的薄
...从“SBI”援引(为什么?使用getter和setter)
就个人而言,我还没有看到如何:
Class Foo {
public $bar;
function setBarType($val) {
$this->bar = $val;
}
}
$fee = new Foo();
$fee->setBarType(42);
优于这样的:
Class Foo {
public $bar;
}
$fee = new Foo();
$fee->bar = 42;
你有可能分配前检查'$ val',如果出现错误抛出异常,触发用户错误或只返回二传手(第一个建议)在您的第一个例子(实际上,这是封装的点)。 – Leri
@Leri,这实际上很有道理。但这是否意味着我必须为类中的每个属性获取/设置方法,如果我有50个不同的属性会发生什么 - 每个属性都有一个getter/setter? – ReactingToAngularVues
具有50种不同属性的类最可能违反SRP。无论如何,这是开发者的选择。例如,我从不使用DTO的getters/setter,而将它们用于DomainObjects,因为我仅将DTO用于映射数据(主要是反射),而在DomainObjects中,我需要确保具有_correct_数据。 – Leri