PHP使用static關鍵字聲明靜態屬性和靜態方法


PHP使用static關鍵字聲明靜態屬性和靜態方法

在PHP中,通過static關鍵字修飾的成員屬性和成員方法被稱為靜態屬性和靜態方法。

靜態屬性和靜態方法不需要在被類實例化的情況下就可以直接使用。

1. 靜態屬性

靜態屬性就是使用static關鍵字修飾的成員屬性,它屬於類本身而不屬於類的任何實例。它相當於存儲在類中的全局變量,可以在任何位置通過類來訪問。

靜態屬性不能通過一個類已實例化的對象來訪問。

靜態屬性訪問的語法格式如下:

類名稱::$靜態屬性名稱

其中的符號“::”被稱為范圍解析操作符,用於訪問靜態屬性、靜態方法和常量,還可以用於覆蓋類中的成員和方法。

在靜態屬性的名稱前加上操作符“self::”,即可在類內部的成員方法中訪問靜態屬性。而只使用類名稱::,則可以在類外面調用類內部的靜態屬性。

注意:

靜態屬性不可以由對象通過->操作符來訪問。

就像其它所有的PHP靜態變量一樣,靜態屬性只能被初始化為文字或常量,不能使用表達式。所以可以把靜態屬性初始化為整數或數組,但不能初始化為另一個變量或函數返回值,也不能指向一個對象。

2. 靜態方法

靜態方法就是通過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關鍵字聲明靜態屬性和靜態方法的顯示效果。如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM