有很多人可能弄不清楚,在php中類的靜態成員變數和普通成員變數有什麼區別?
1、類的靜態方法只能訪問靜態成員變數,而不能訪問非靜態成員變數
2、靜態成員變數不需要例項化就能訪問,且訪問速度快一些
3、類的靜態成員變數只屬於這個類,但類的所有例項共享這個靜態成員變數
乙個由 c/c++編譯過的程式占用的記憶體分為一下幾個部分
(1)、棧區 stack :
由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。這個棧的操作方式類似於資料結構中的棧。棧區是在程式執行前就會分配好的,速度較堆要快
(2)、堆區 heap :
一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**,注意它與資料結構中的堆是兩回事,分配方式類似於鍊錶。是在程式執行時動態分配的,速度較棧慢
(3)、全域性區(靜態去)static :
全域性變數和靜態變數的儲存是放在一塊的。初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和靜態變數又放在相鄰的另一塊區域中。程式結束後由系統釋放。
(4)、文字常量區 :
常量字串放在這裡。程式結束後由系統釋放。
(5)、程式**區 :
存放函式體的2進製**。
下面咱們一起來做個小例子:
class a
public function seta($val)
public function getb()
public function setb($val)
public static function getbb()
}
$a = new a();
echo $a->geta();
$a->seta('aaaa');
echo '
';$b = new a();
echo $b->geta();
echo '
';$c = new a();
echo $c->geta();
上面的執行結果會是:5 aaaa aaaa
類的物件$a將類的靜態成員變數值修改後,由於類的所有例項物件共享靜態成員變數,所以其他物件在獲取靜態成員變數值時就會發生改變。
$a = new a();
echo $a->getb();
$a->setb('aaaa');
echo '
';$b = new a();
echo $b->getb();
上面的執行結果是:4 4
echo a::getbb();
會發生報錯,因為類的靜態方法只能訪問靜態成員變數
相信看到這裡大家應該會明白了吧!
錯誤之處歡迎指出!
PHP靜態成員變數和非靜態成員變數
php靜態成員變數和非靜態成員變數 突然在網上找到了一遍對php靜態變數和非靜態變數講解比較深入的一遍文章,特轉來分享下。資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態...
PHP靜態成員變數和非靜態成員變數
資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類 中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配內 存,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中...
靜態成員變數與普通成員變數的區別
1.靜態成員變數是屬於整個類的全域性變數,它不單屬於某乙個物件 普通成員變數是屬於類中的物件,它不能被所有物件共享。如 class a int a n 0 void show cout 輸出 1a 2a 3a 4a 5a 該例沒有建立乙個物件,但是去可以通過類名和限定符訪問靜態變數n,並且對其進行自...