首頁  >  文章  >  後端開發  >  物件模型 PHP 50物件模型深度探索之類的靜態成員

物件模型 PHP 50物件模型深度探索之類的靜態成員

WBOY
WBOY原創
2016-07-29 08:37:39888瀏覽

  靜態屬性包含在類別中要封裝的數據,可以由所有類別的實例共用。實際上,除了屬於一個固定的類別並限制存取方式外,類別的靜態屬性非常類似於函數的全域變數。
  我們在下例中使用了一個靜態屬性Counter::$count。它屬於Counter類,而不屬於任何Counter的實例。你不能用this來引用它,但可以用self或其它有效的命名表達。在範例中,getCount方法傳回self::$count,而不是Counter::$count。
  靜態方法則實現類別需要封裝的功能,與特定的物件無關. 靜態方法非常類似於全域函數. 靜態方法可以完全存取類別的屬性,也可以由物件的實例來訪問,不論存取的限定語是否是什麼.
  在前文的例子中,getCount是一個普通的方法,用->來調用. PHP建立一個this變量,儘管方法沒有使用到.但是,getCount不屬於任何對象.在有些情況下,我們甚至希望在不存在有效的物件時呼叫它,那麼就應該使用靜態方法. PHP將不在靜態方法內部建立this變量,即使你從一個物件中呼叫它們.
  範例6.7由6.3改變getCount為靜態方法而來. Static關鍵字不能阻止一個實例用->運算子來調用getCount,但PHP將不在方法內部建立this變數.如果你使用this->來調用,將會出錯.
//6.3例指第四節--構造函數和析構函數中的例子(參看前文),透過兩個例子的比較,你可以很好掌握
//static方法與普通方法之間的區別.
  你可以寫一個方法透過判斷this是否建立來顯示是否它被靜態地或非靜態地調用. 當然,如果你用了static 關鍵字,不管它怎樣被調用,這個方法總是靜態的.
你的類別也可以定義常數屬性,不需要使用public static,只需要用const關鍵字即可. 常數屬性總是靜態的.它們是類別的屬性,而不是實例化該類別的物件的屬性.
Listing 6.7 Static members

複製代碼 程式碼如下:


= 0; 
 const VERSION = 2.0; 
 function __construct() 
 { 
 self::🎜> { 
 self::($)  { 
  self ::$count--; 
 } 
 static function getCount() 
 { 
  return f::$count; 
  return f::$count;  ,則__construct()將執行 
$c = new Counter(); 
//輸出 1 
print(Counter::getCount() . "n") 
//Counter::getCount() . "n");的版本屬性 
print("Version used: " . Counter::VERSION . "n"); 
?>


以上就介紹了物件模型 PHP 50物件模型深度探索之類的靜態成員,包括了物件模型方面的內容,希望對PHP教程有興趣的朋友有所幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn