[英]What is the convention of __ means in php?
我看到一些ppl寫代碼如下:
他們在變量的命名中使用__:
public static function getInstance(){
if(self::$__instance == NULL) self::$__instance = new SCFormatter();
return self::$__instance;
}
不僅是變量,還有功能:
private function __clone(){}
php編碼器使用“__”作為前綴是否有任何特殊含義。 謝謝。
PHP
__
用於__get
, __set
, __clone
等magic methods
在變量或函數之前的歷史_
意味着它是私有的,因為PHP 4
沒有私有,公共或受保護的方法。
它不僅適用於PHP
。 例如,在Python
中,函數和變量的_
前綴用於相同的目的。
我建議避免將函數命名為__
(雙下划線),因為PHP開發人員可以在下一版本的語言中添加相同的魔術函數,因此會破壞您的代碼。 你可以使用一個下划線 - 它並不危險,因為它不會影響語言功能。 雖然有可能,但請注意,不建議使用_
作為屬性/方法名稱前綴,因為它不符合當今的大多數編碼標准。
沒有特殊的句法意義。 但是,PHP團隊非常不鼓勵在名稱的開頭使用__
,因為您可能會破壞未來的核心PHP功能。
PHP嘗試使用__
為核心名稱添加前綴,這樣它們就不會干擾您的名字。 例如,有一個__construct()
方法,一個__sleep()
方法,一個__wakeup()
方法等。它們沒有將它們稱為construct()
, sleep()
和wakeup()
因為它們可能會干擾您自己的名字。
這是一般做法。 例如,在Linux內核中也是如此。 系統函數以__
為前綴,因此它們不會干擾您的命名。 如果你開始使用__
自己的名字添加前綴,那么你將開始干擾他們的命名,這將破壞系統功能,或者在你最不希望的時候將來很可能破壞你的應用程序。
如果PHP團隊以某種方式決定在名為$__instance
每個類中創建一個靜態變量,那么所有腳本將突然開始破壞,你不會知道原因。
在Magic手冊的PHP手冊頁中引用警告:
PHP保留所有以
__
開頭的函數名稱作為魔法。 除非您需要一些記錄的魔術功能,否則建議您不要在PHP中使用帶__
函數名。
關於__clone()
- 它是一個PHP功能,進一步證明用__
為自己的名字添加前綴也可能非常令人困惑。
所有PHP Magic方法都以雙下划線開頭。 這包括__clone()
。 雖然它不是由PHP強制執行的,但是不鼓勵以雙下划線開頭命名自己的方法,因為這些名稱可能會與未來的PHP魔術方法發生沖突。
它們通常用於表示私有變量。 基本上變量和方法不能具有相同的名稱,因此它可以提供沒有沖突名稱的私有變量。 如果你走那條路,我會用一個下划線。
另外如其他地方提到的php有魔術方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.