一、靜態屬性
靜態屬性不可以由對象通過 -> 操作符來訪問。
靜態屬性只能被初始化為文字或常量,不能使用表達式。所以可以把靜態屬性初始化為整數或數組,但不能初始化為另一個變量或函數返回值,也不能指向一個對象。
如何訪問靜態屬性呢?
在類內部:類名::$靜態屬性 或者 self::$靜態屬性
在類外部:類名::$靜態屬性 或者 對象實例::$靜態屬性
class Person{ public static $nums = 0; // 靜態屬性的申明 public function addNum(){ self::$nums++; echo self::$nums; // 在類里面,可用self關鍵詞訪問靜態屬性 echo Person::$nums; // 類可直接訪問靜態屬性 // echo $this->nums; // 報錯,靜態屬性不可以由對象通過 -> 操作符來訪問 } } $p1 = new Person(); echo $p1::$nums; // 對象實例可以這樣訪問靜態屬性
二、靜態方法
靜態方法用於操作靜態屬性。所以,靜態方法里面不能操作非靜態屬性。
由於靜態方法不需要通過對象即可調用,所以偽變量$this在靜態方法中不可用。
如何訪問靜態方法呢?
在類內部:類名::靜態方法 或者 self::靜態方法
在類外部:類名::靜態方法 或者 對象實例->靜態方法
class Person{ public static $nums = 0; // 靜態屬性的申明 public $age = 0; public function addNum(){ self::$nums++; echo self::$nums; // 在類里面,可用self關鍵詞訪問靜態屬性 echo Person::$nums; // 類可直接訪問靜態屬性 // echo $this->nums; // 報錯,靜態屬性不可以由對象通過 -> 操作符來訪問 self::getNum(); // 在類里面,可用self關鍵詞訪問靜態方法 Person::getNum(); // 類可直接訪問靜態方法 } public static function getNum(){ // 靜態方法 // echo $this->age; // 報錯,靜態方法里面不能操作非靜態屬性 echo '真的嗎?'.self::$nums; //靜態方法中只能操作靜態屬性 } } $p1 = new Person(); $p1->addNum(); echo $p1::$nums; // 對象實例可以這樣訪問靜態屬性 Person::getNum(); // 類可直接訪問靜態方法 $p1->getNum(); // 對象實例可以這樣訪問靜態方法