我總是看到這種格式在最近的代碼,甚至在這裏:的爲什麼人們在宣佈課程時經常忽略public/private/protected?
class Class {
function this() {}
}
代替
class Class {
[public/private/protected] function this() {}
}
- 是不是建議始終 指定功能範圍有多大?
- 不是第一種方法嗎?
- 如何在第一種方法中將 定義爲私有並保護 函數?
我總是看到這種格式在最近的代碼,甚至在這裏:的爲什麼人們在宣佈課程時經常忽略public/private/protected?
class Class {
function this() {}
}
代替
class Class {
[public/private/protected] function this() {}
}
在聲明函數時不會有公開默認任何關鍵字。
是不是推薦總是指定 的函數範圍?
如果您要將它們作爲私有或受保護的,您必須定義函數範圍。
這不是第一種方法嗎?
如果它們仍然被PHP接受,那麼新舊版本是什麼?
怎麼樣,在第一種方法中, 定義了私有和保護 函數?
你不能用第一種方法你必須使用關鍵字。
PHP誕生於(懶惰的,duck typed)腳本語言,人們仍然以這種方式使用它。大多數PHP程序員都不知道OOP是什麼,我非常瞭解這個問題,因爲我從PHP開始,這確實讓我花了很多工作。大約90%的PHP代碼在面向對象,可讀性,封裝等方面都是凌亂和過時的......至少有50%是純粹的廢話。 :(
我不能告訴你有多少時,他們發現,「依賴注入」實際上是由PHP開發人員認爲是一個創新的設計模式,面向對象的編程人員驚訝的,它需要加以解釋。
然而, PHP4沒有範圍運算符,例如private或protected。當時,您曾經聲明一個方法,在方法名稱前面加上一個或多個下劃線,以表明它不打算從外部類中調用。
public
可見性修飾符。private
或protected
成員。最重要的PHP4兼容性和親和力。
一些開發人員(如我)忽略了可訪問性修飾符,因爲它們對腳本語言幾乎沒有影響。像Python或Javascript這樣的真正的OOP語言沒有private
或protected
屬性,並且不需要它。在PHP中有點不同,但它沒有任何意義,總是適用於語法糖。我會親自將其預留爲有用的應用程序。
很多PHP編碼人員都不知道「封裝」的原始目的,因爲它不適用於超出邏輯可見性的未編譯代碼。它實際上在PHP中增加了一點脆弱性,因爲它會在運行時造成錯誤,而不是編譯時(比如在C++中)。
我不能再忍不住說出來了:許多編碼人員也僅僅將它作爲來模擬類似Java的語法(以彌補感知/過去缺乏OOP構造的PHP)。
PSR-2編碼標準明確要求將可見性修改器同時用於properties和methods。
使用public
並不是必需的,不過因爲PHP 5和7向後兼容版本4,而版本4只能公開顯示所有內容,所以它是默認設置。
但是,省略它會引發問題 - 就像你做的那樣。人類非常善於檢測模式中的模式和錯誤。您會如何看待使用protected
或private
無處不在(因爲您必須)的代碼片段,但會隨機忽略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。
5年後..大約95%的PHP代碼在面向對象,可讀性,封裝等方面都是凌亂和過時的......至少有80%是純粹的廢話。 :(.. – dbf 2016-07-27 18:04:03