變量封裝,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