簡單的說,靜態變量就是所有對象都共享的變量。靜態變量也稱為類變量,靜態方法也稱為類方法。
訪問修飾符 static 變量名;
(1)在類外部:類名::$類變量名
(2)在類內部:self::$類變量名或者::$類變量名
例:一群小孩在玩游戲,不時有新的小孩加入游戲。問:如何知道現在有多少小孩在玩游戲,用面向對象的思想來實現。
(1)加上static稱為靜態變量或者類變量,否則稱為實例變量;
(2)類變量是與類相關的,公共的屬性;
(3)實例變量屬於每個對象個體的屬性;
(4)類變量可以通過 類名::類變量名 這種形式直接訪問。
什麼是全局變量?在程序的任何位置都可以使用的變量,稱為全局變量。
<?php
//玩游戲人數的全局變量
global $global_nums;
$global_nums=0;
class Child{
public $name;
function __construct($name){
$this->name=$name;
}
public function join_game(){
//聲明使用全局變量
global $global_nums;
$global_nums+=1;
echo $this->name.'加入游戲了'."<br />";
}
//創建三個小孩
}
$child1=new Child("www.bianceng.cn");
$child1->join_game();
$child2=new Child("李四");
$child2->join_game();
$child3=new Child("王二");
$child3->join_game();
//看有多少人玩游戲
echo "<br /> 有".$global_nums."人玩游戲";
?>
<?php
class Child{
public $name;
public static $nums=0; //定義靜態變量
function __construct($name){
$this->name=$name;
}
public function join_game(){
self::$nums+=1;
echo $this->name.'加入游戲了'."<br />";
}
//創建三個小孩
}
$child1=new Child("www.bianceng.cn");
$child1->join_game();
$child2=new Child("李四");
$child2->join_game();
$child3=new Child("王二");
$child3->join_game();
//看有多少人玩游戲
echo "<br /> 有".Child::$nums."人玩游戲";
?>
靜態方法也叫類方法,靜態方法是屬於所有對象實例的,形式如下:
訪問修飾符 static 方法名(){
語句;
}
當我們操作靜態變量時,可以考慮使用靜態方法
注意:類方法中不能訪問非靜態屬性(變量);普通方法既可以訪問靜態變量,也可以訪問非靜態變量。
類名::類方法名 或者 對象名->類方法名;
self::類方法名 或者 類名:類方法名
<?php
class Student{
public static $fee=0;
public $name;
//構造函數
function __construct($name){
$this->name=$name;
}
//入學
public static function enterSchool($ifee){
self::$fee+=$ifee;
}
//獲取總學費
public static function getFee(){
return self::$fee;
}
}
//創建學生
$stu1=new Student("張三");
//通過類名來調用靜態方法
Student::enterSchool(340); // 等價於$stu1->enterSchool(340);
$stu2=new Student("李四");
$stu2->enterSchool(600);
echo "總學費是:".Student::getFee();
?>
URL:http://www.bianceng.cn/webkf/PHP/201610/50459.htm