PHP 類的靜態成員變數和普通成員變數對比

2021-07-02 21:53:49 字數 1413 閱讀 9123

有很多人可能弄不清楚,在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,並且對其進行自...