2011-05-03 87 views
6

我總是看到這種格式在最近的代碼,甚至在這裏:的爲什麼人們在宣佈課程時經常忽略public/private/protected?

class Class { 
    function this() {} 
} 

代替

class Class { 
    [public/private/protected] function this() {} 
} 
  1. 是不是建議始終 指定功能範圍有多大?
  2. 不是第一種方法嗎?
  3. 如何在第一種方法中將 定義爲私有並保護 函數?

回答

9

在聲明函數時不會有公開默認任何關鍵字。

是不是推薦總是指定 的函數範圍?

如果您要將它們作爲私有或受保護的,您必須定義函數範圍。

這不是第一種方法嗎?

如果它們仍然被PHP接受,那麼新舊版本是什麼?

怎麼樣,在第一種方法中, 定義了私有和保護 函數?

你不能用第一種方法你必須使用關鍵字。

0

PHP誕生於(懶惰的,duck typed)腳本語言,人們仍然以這種方式使用它。大多數PHP程序員都不知道OOP是什麼,我非常瞭解這個問題,因爲我從PHP開始,這確實讓我花了很多工作。大約90%的PHP代碼在面向對象,可讀性,封裝等方面都是凌亂和過時的......至少有50%是純粹的廢話。 :(

我不能告訴你有多少時,他們發現,「依賴注入」實際上是由PHP開發人員認爲是一個創新的設計模式,面向對象的編程人員驚訝的,它需要加以解釋。

然而, PHP4沒有範圍運算符,例如private或protected。當時,您曾經聲明一個方法,在方法名稱前面加上一個或多個下劃線,以表明它不打算從外部類中調用。

  1. 是建議
  2. 的確是這樣,在一個面向對象的角度
  3. 命名約定有希望必須由客戶理解
+0

5年後..大約95%的PHP代碼在面向對象,可讀性,封裝等方面都是凌亂和過時的......至少有80%是純粹的廢話。 :(.. – dbf 2016-07-27 18:04:03

1
  1. 是的。總是建議指定功能/屬性可見性。
  2. 是的。沒有可見性修飾符的版本一直在PHP4之前。使用PHP5可見性修飾符已經引入。由於遺留代碼的向後兼容性,沒有可見性修飾符的版本仍被接受並被視爲具有public可見性修飾符。
  3. PHP4對可見性一無所知,因此您無法使用此visibility-modifier-less語法定義privateprotected成員。
0

最重要的PHP4兼容性和親和力。

一些開發人員(如我)忽略了可訪問性修飾符,因爲它們對腳本語言幾乎沒有影響。像Python或Javascript這樣的真正的OOP語言沒有privateprotected屬性,並且不需要它。在PHP中有點不同,但它沒有任何意義,總是適用於語法糖。我會親自將其預留爲有用的應用程序。

很多PHP編碼人員都不知道「封裝」的原始目的,因爲它不適用於超出邏輯可見性的未編譯代碼。它實際上在PHP中增加了一點脆弱性,因爲它會在運行時造成錯誤,而不是編譯時(比如在C++中)。
我不能再忍不住說出來了:許多編碼人員也僅僅將它作爲​​來模擬類似Java的語法(以彌補感知/過去缺乏OOP構造的PHP)。

2

PSR-2編碼標準明確要求將可見性修改器同時用於propertiesmethods

使用public並不是必需的,不過因爲PHP 5和7向後兼容版本4,而版本4只能公開顯示所有內容,所以它是默認設置。

但是,省略它會引發問題 - 就像你做的那樣。人類非常善於檢測模式中的模式和錯誤。您會如何看待使用protectedprivate無處不在(因爲您必須)的代碼片段,但會隨機忽略public。這是一個錯誤嗎?它是否故意完成?什麼樣的祕密行爲應該由此觸發?或者,這仍然是隱藏一些討厭的兼容性問題的PHP4代碼?作爲一名開發人員,您不想問這些問題,而且您也不想找到答案。

public是可選的,但PSR-2決定要求它。遵循標準建議。

另請注意,已有a proposal to deprecate and remove the var modifier屬性,並完全用public取而代之。該提案還列出了Packagist上的最高10'000個軟件包的代碼分析,指出該代碼庫中所有類別的94%獨佔使用public,其餘6%使用var的類別來自四個較大的軟件包,它們很可能仍嘗試與PHP4兼容,「Simpletest」(針對PHP 4的單元測試框架)處於領先地位。

對於我所知道的方法,沒有可見性修飾符的靜態代碼分析,但趨勢清晰可見:擺脫舊的PHP4-isms。