在PHP中,透過static關鍵字修飾的成員屬性和成員方法稱為靜態屬性和靜態方法。
靜態屬性和靜態方法不需要在被類別實例化的情況下就可以直接使用。
靜態屬性就是使用static關鍵字修飾的成員屬性,它屬於類別本身而不屬於類別的任何實例。它相當於儲存在類別中的全域變量,可以在任何位置透過類別來存取。
靜態屬性不能透過一個類別已實例化的物件來存取。
靜態屬性存取的語法格式如下:
类名称::$静态属性名称
其中的符號「::」稱為範圍解析運算子,用於存取靜態屬性、靜態方法和常數,也可以用於覆寫類別中的成員和方法。
在靜態屬性的名稱前加上操作符“self::”,即可在類別內部的成員方法中存取靜態屬性。而只使用類別名稱::,則可以在類別外面呼叫類別內部的靜態屬性。
注意:
靜態屬性不可以由物件透過->操作符來存取。
就像是它所有的PHP靜態變數一樣,靜態屬性只能被初始化為文字或常數,不能使用表達式。所以可以把靜態屬性初始化為整數或數組,但不能初始化為另一個變數或函數回傳值,也不能指向一個物件。
靜態方法就是透過static關鍵字修飾的成員方法。由於它不受任何物件的限制,所以可以不透過類別的實例化直接引用類別中的靜態方法。
靜態方法可以透過一個類別已實例化的物件來存取。
靜態方法引用的語法格式如下:
类名称::静态方法名称([参数1,参数2,...])
同樣,在靜態方法的名稱前加上操作符“self::”,即可在類別內部的成員方法中引用靜態方法。而只使用類別名稱::,則可以在類別外面呼叫類別內部的靜態方法。
注意:
在靜態方法中,只能呼叫靜態變量,而不能呼叫普通變數;而普通方法則可以呼叫靜態變數。
用靜態方式呼叫一個非靜態方法會導致一個E_STRICT等級的錯誤。
由於靜態方法不需要透過物件即可調用,所以偽變數$this在靜態方法中不可用。
使用靜態成員,除了可以不需要實例化對象,另一個作用就是在對像被銷毀後,仍然保存被修改的靜態數據,以便下次繼續使用。
為了相容PHP 4,如果沒有指定為protected或private,靜態屬性和靜態方法則預設為公有public。
自PHP 5.3.0起,可以用一個變數來動態呼叫類,但該變數的值不能為關鍵字self、parent或static。
靜態成員不用實例化對象,當類別第一次被載入時就已經分配了記憶體空間,所以直接呼叫靜態成員的速度要快一些。但如果靜態成員宣告得過多,空間一直被佔用,反而會影響系統的功能。這個尺度只能透過實踐累積才能真正把握!
<?php class website{ static $num="0"; // 定义静态变量 public function visit(){ // 定义visit方法 echo "您是第".self::$num."位访客!"; // 输出静态变量信息 self::$num++; // 静态变量做自增运算 } } echo '第一次实例化调用:<br />'; $website=new website(); // 实例化对象 $website->visit(); // 调用对象$website的visit()方法 $website->visit(); $website->visit(); echo '<br />第二次实例化调用:<br />'; $website2=new website(); // 改变对象句柄实例化对象 $website2->visit(); $website2->visit(); $website2->visit(); ?>
在瀏覽器中查看PHP使用static關鍵字聲明靜態屬性和靜態方法的顯示效果。如下圖:
#
以上是php使用static關鍵字聲明靜態屬性和靜態方法的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!