7:靜態屬性和靜態方法
阿新 • • 發佈:2018-11-03
在屬性或方法前面加 static
修飾,即可稱為靜態屬性/方法
- 普通屬性例項化之後放在例項物件上,靜態屬性則是放在類上;
- 可以不例項化類而直接訪問,不能通過一個類已例項化的物件訪問,直接使用類訪問:
類名::$屬性名
; - 靜態屬性只能被初始化為直接量,不能使用表示式,不能將另一個變數、函式返回值,物件作為靜態屬性的值;
-
屬性名
,
self:: 屬性名’; - 靜態屬性會保留上次操作的值;
- 一般靜態屬性用於儲存類中的公有資料;
- 訪問父類靜態屬性使用
parent::$屬性名
; - 靜態屬性為所有例項物件共享;
靜態屬性存放於類空間內
- 類被宣告完畢,靜態屬性也被隨之建立
- 類在記憶體中只有一個,因此靜態屬性也只有一個
靜態方法的特點
- 在類中:
- 普通方法呼叫需要物件去呼叫,需要繫結this
- 靜態方法不屬於某一個物件,它屬於本類,呼叫不需要繫結this,所以this訪問不了靜態方法,屬性也是同理;
- 符;
- 一個靜態方法呼叫另一個非靜態方法,則產生錯誤;靜態方法中也不能在本類中去訪問一個非靜態屬性;
- 訪問父類靜態方法使用
parent::方法名()
; - 可以不例項化類而直接訪問,不能通過一個類已例項化的物件訪問,直接使用類訪問:
類名::方法名()
; - 靜態方法呼叫本類中的非靜態方法:
class Ren{
public static function haha(){
//echo self::hehe(); 這個方式在高版本PHP中不適用
//高版本PHP:
( new self() ) -> hehe();//可以正常輸出
}
public function hehe(){
echo '我是非靜態方法.';
}
}
-
在JAVA中:動能訪靜,靜不能訪動,而PHP足夠鬆散,雖然有方法可以達到訪問的目的,但是最好不要這樣做。因為靜態的東西屬於全類,你要訪問某個普通的方法,你怎麼知道,這個普通的方法屬於那個物件的呢?所以
new self() -> 屬性/方法
就不難理解是什麼意思,現場建立一個例項物件,然後使用它的屬性或方法; -
實在理解不了,背這個也行
類---訪問---靜態屬性---可以
類---訪問---靜態方法---可以
類---訪問---普通屬性---不可以
類---訪問---普通方法---不可以
靜態方法---訪問---靜態屬性---可以
靜態方法---訪問---靜態方法---可以
靜態方法---訪問---普通屬性---不可以
靜態方法---訪問---普通方法---不可以
例項---訪問--普通屬性---可以
例項---訪問--普通方法---可以
例項---訪問--靜態方法---可以
例項---訪問--靜態屬性---不可以