好吧,這真的讓我感到困擾,我開始認爲這一切都歸結爲個人選擇,而不是一種更高效或編寫更好代碼的特定方式:我應該還是不應該使用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