標籤:style c class a color get
1.全域變數[其不屬於物件導向的思想,因為其放在對象之外的],物件導向有一個特點,其實封裝的,php希望其所有的成員都應該放在類中;php的物件導向是基於物件導向的,不是純粹物件導向的;也就是其可以物件導向編程,也可以不物件導向編程。
使用global定義全域變數,其放在記憶體的全域區/靜態區中,在代碼中其是放在class外面的。
global $global_a;
$global_a=8;//只能這樣給全域變數賦值,否則會報錯
//在函數中使用全域變數
function test(){
global $global_a;//global才能得到$a的地址
$global_a=90;//找到外層的$a的地址位置並將其值改成90
}
test();
echo $global_a;//輸出90,如果函數中在使用全域變數時沒有使用global關鍵字的話,輸出的值是8
2.static關鍵字的理解
注意:
a.要在類中定義static變數
b.使用static變數可以在類中也可以在類外使用(靜態對象不會依賴於對象的建立而建立,也就是說在訪問static變數時,不用去建立對象就可以直接方法:
class Person{
public static $a=90;
public function __construct(){
echo "你好";
}
}
echo Person::$a;
//沒有new Person();但是還是可以得到$a等於90。在php中new關鍵字才會調用__construct方法,如果沒有new就不會調用該方法;因此在這裡“你好”不會輸出
)
class Child{
public $name;
public static $num=0;//定義static屬性
function __construct($cname){
$this->name=$cname;
}
public function play_game(){
//使用static屬性,在類中,1.self::$類變數名 2. 類名::$類變數名(在類外部才用第二種方式使用)
self::$num+=1;//在類中使用static變數
echo $this->name."加入了玩遊戲<br/>";
}
}
$child1=new Child(‘倪華‘);
$child1->play_game();
$child2=new Child(‘萬鑫‘);
$child2->play_game();
$child3=new Child(‘盛盛‘);
$child3->play_game();
echo Child::$num;//在類外使用static屬性
3.static方法(靜態方法,注意:在類方法中不能使用非靜態屬性[變數],在使用靜態變數時往往採用靜態方法)
靜態方法也叫類方法,靜態方法是屬於所有對象的執行個體的,其定義形式為:[修飾符] static function 方法名(){}
在類中使用類方法:self::類方法名 或者 類名::類方法名
在類的外部使用:類名::類方法名 或者 對象名->類方法名
class Student{
public $name;
public static $fee;
function __construct($name){
$this->name=$name;
}
public static function enter_school($fee){
self::$fee+=$fee;
}
static function getFee(){
return self::$fee;
}
}
$stu=new Student("張三");
Student::enter_school(200);
$stu=new Student("張三333");
$stu->enter_school(300);
echo "總費用是".$stu->getFee();
靜態方法的特點:
靜態方法只能操作靜態變數
靜態方法不能操作非靜態變數
普通成員方法可以操作靜態變數也可以操作普通變數,但是不能訪問靜態方法,靜態方法也不能訪問靜態方法