簡體   English   中英

Object 面向命名約定

[英]Object Oriented Naming Conventions

使用附加到對象的方法構建代碼的名稱是什么?

例如:

" ... ".trim 

或者

obj.method()

起初,許多人會爭辯說這是面向 Object 的,但php是面向 Object 的(以及部分trim("... ") ,但它的語法完全不同。

TL;DR“面向對象”和“一切都是對象”不是有效的答案,除非......

人們不斷建議 PHP 是“面向對象”而庫是“面向對象”,然而 PHP 庫的代碼通常由大量的 static 類構成。

例如紅豆:

  • R::dispense($bean)
  • R::store($bean)
  • R::垃圾($豆)

這不遵循obj.method語法,但據說是面向 Object 的。 PHP 的 object 方向是否具有誤導性,或者obj.method()編碼風格是否有更好的名稱。

PHP 兩者都可以。 您可以編寫面向 object 的代碼,也可以編寫程序代碼。 過程代碼更容易理解和編寫,大多數 PHP 程序員並不真正了解 OOP,所以他們編寫,我稱之為偽裝成 OOP 的過程代碼。 這包括諸如 static 方法和單例之類的東西。

PHP 的許多核心功能都是 C 的遺產,所以如果它不遵循 OOP 約定,請不要感到驚訝。

重要的是,在對象上調用方法確實遵循 OOP 約定。

PHP 中的字符串不被視為對象,而是標量值。 因此,除非首先將標量字符串文字轉換為 object,否則語法"..."->trim()無法工作。

有一個關於自動裝箱(將標量值自動轉換為對象)的公開提議。 這將允許通常的 object 面向語法。 然而,自動裝箱確實有一點性能損失。 在這里查看更多:

https://wiki.php.net/rfc/autoboxing

對於 RedBeanPHP,我使用 static 方法作為外觀。 這比純粹的 OO 代碼更加用戶友好。 您不必了解 RedBeanPHP 的所有內部結構就可以使用它(還有一種 OO 方式來使用 lib)。 在我看來,RedBeanPHP 真的是面向 object 的; 在門面后面,它使用 inheritance、接口、多態性和適配器、工廠、觀察者等模式。

另外,我相信 OOP 更像是一種思維方式,而不僅僅是一種語法。 例如,您也可以使用結構和 function 指針或像 GTK 那樣來制作面向 object 的系統。 OOP 語言中的功能只是為了方便。 此外,由於 PHP 是一種動態語言(與 static 類型相比),它不必依賴類型,它可以只掃描對象以獲得所需的行為。 在我看來,這是一件好事,因為它更靈活,更易於維護,比如 Java 中的深層 class 層次結構。 我曾經是一個 OO 純粹主義者,但我最近接受了 OOP 實用主義; 只需使用兩全其美。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM