所謂靜態屬性,也就是這個屬性對於這個類來說是唯一的,不管有多少個對象,只要它引用了一個靜態對象,那么這些對象引用出來的值肯定是同一個。
靜態變量不能使用->這種箭頭符號,而是使用::這種作用域符號。
我們可以直接使用“類名::靜態屬性名”的格式訪問靜態屬性。
從內存上來看,靜態屬性和普通屬性並不使用同一塊內存,這也就決定了它天生就有一點特殊。
靜態屬性是只會被初始化一次,之后的每次調用都會使用原來的值。
例子:
class star{
static public $count=1;
function __construct(){
echo "這是第",self::$count;
echo "次實例化","
";
";
self::$count +=1;
}
}
$xin=new star();
$mao=new star();
$xi=new star();
在類的內部,我們使用 self::靜態屬性名 這種格式去訪問它們。
我們在構造函數中直接調用靜態屬性$count,而且每次該函數被調用的時候,同時執行一個自增操作,也就是次數加一。
執行結果為:
這是第1次實例化
這是第2次實例化
這是第3次實例化
這是第2次實例化
這是第3次實例化
這里由於該屬性是靜態的,它只會被初始化一次,之后再次調用的時候就會變成自增。
如果我們把相應的靜態屬性換成普通屬性
例子:
class star{
public $count=1;
function __construct(){
echo "這是第",$this->count;
echo "次實例化","
";
";
$this->count +=1;
}
}
$xin=new star();
$mao=new star();
$xi=new star();
執行結果為:
這是第1次實例化
這是第1次實例化
這是第1次實例化
普通屬性在每次實例化的時候都會被重新賦值一次,也就是說$this->count 得到的結果始終是1,因為它被重新賦值了N次。
靜態方法
所謂靜態方法,就是這個方法是屬於這個類的,我們可以在不實例化任何對象的時候調用它。
對於靜態方法我們要重點關注它的三個特點:
1,如何聲明一個靜態方法
2,如何去調用這個靜態方法
3,靜態方法可以干什么不可以干什么
class star{
static function team($name){
echo "隊伍核心成員:";
echo $name;
echo "
";
";
}
}
star::team("罐罐");
$guan=new star();
$guan->team("萌罐罐");
輸出結果為:
隊伍核心成員:罐罐
隊伍核心成員:萌罐罐
隊伍核心成員:萌罐罐
1,聲明定義一個靜態函數很簡單,它只需要在function前面加一個static關鍵字就可以了。
2,調用靜態方法可以使用 “類名::靜態函數名”的格式去調用,也可以直接實例化一個變量,然后使用變量名->函數名的方法調用。
3,由於靜態方法不需要類的實例化就能夠被調用,而普通方法和普通屬性都必須先聲明一個對象才可以訪問,因此,在靜態方法里面始終是不能使用普通方法和訪問普通變量的。
關於靜態方法要牢牢記住一點:“靜態方法是屬於整個類的。”
