一、下面是全局變量使用:
<?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/>";
}
}
//建立3個小孩
$child1=new Child("aaa");
$child1->join_game();
$child2=new Child("bbb");
$child2->join_game();
$child3=new Child("ccc");
$child3->join_game();
echo $global_nums;
?>
注意:全局變量只能先定義,再進行初始化,不能直接初始化,或初始化和定義寫到一塊兒。
二、static 靜態變量使用
<?php
class Child{
public $name;
public static $nums=0;
function __construct($name){
$this->name=$name;
}
public function join_game(){
//類內部訪問 2中以下
//Child::$nums+=1;
self::$nums+=1;
echo $this->name."加入堆雪人遊戲<br/>";
}
}
//建立3個小孩
$child1=new Child("aaa");
$child1->join_game();
$child2=new Child("bbb");
$child2->join_game();
$child3=new Child("ccc");
$child3->join_game();
$child4=new Child("ddd");
$child4->join_game();
//外部訪問
echo Child::$nums;
?>
靜態變量只能定義在類中,使該類的全部對象共享的變量,任何一個該類的對象去訪問他時,取到的數值都是同樣的,一樣任何一個該類的變量去修改他時,修改的都是同一個變量。
如何訪問靜態變量:
在類外部:類名::$類變量名
在類內部:self::$類變量名 或者 類名::$類變量名
具體在內存的分配狀況見下圖:
下面是簡單的實例,加深對上面的理解:
<?php
/*
//第一種狀況
class Person{
public static $a=90;
}
echo Person::$a;
// 輸出不會報錯打印:90
*/
/*
//第二種狀況「
class Person{
public static $a=900;
public function __construct(){
$this->a=45;//(1)
}
}
echo Person::$a;
//不會報錯,輸出900;(1)寫法是錯誤的,可是由於沒有建立對象,
//因此不會被調用,也就不會出錯~
*/
//第三種狀況「
class Person{
public static $a=9011;
public function __construct(){
$this->a=45;//(1)
}
}
$p1=new Person();
echo Person::$a;
//;(1)寫法是錯誤的,可是由於建立了對象,被調用
?>