PHP 引用變數

2022-08-03 21:39:24 字數 2193 閱讀 2759

在php 中引用的意思是:不同的名字訪問同乙個變數內容.使用&表示

2.1、不使用 &

$a = range(0,1000

);var_dump(memory_get_usage());

$b =$a;

var_dump(memory_get_usage());

$a = range(0,1000

);var_dump(memory_get_usage());

執行結果:
內存在第一次和第二次並沒有太大的差異,第三次產生較大差異

2.2、使用 & 

$a = range(0,1000

);var_dump(memory_get_usage());

$b = &$a;

var_dump(memory_get_usage());

$a = range(0,1000

);var_dump(memory_get_usage());

執行結果:

內存在過程中基本沒有發生變化,雖然第三步進行了寫操作,但是 $a,$b引用的同乙個位址,就不需要開闢新位址

xdebug 的安裝方法 網上很多,這裡不細講(php 的乙個擴充套件外掛程式而已)

3.1、不使用 &

//

zval 變數容器

$a = range(0, 3

);xdebug_debug_zval('a

');//定義變數b,把a的值賦值給b

$b =$a;

xdebug_debug_zval('a

');//修改a

$a = range(0, 3

);xdebug_debug_zval('a

');

執行如下:

refcount用以標識指向這個zval變數容器的變數個數

is_ref(bool),標識此變數是否屬於引用集合

第二步只進行了copy 操作,使$a , $b 指向同乙個記憶體位址, refcount = 2,而第三步 發生了寫操作(is_ref=0 不是引用),重新開闢了記憶體位址,refcount= 1

3.2、使用 &

//

zval 變數容器

$a = range(0, 3

);xdebug_debug_zval('a

');//定義變數b,把a的值賦值給b

$b = &$a;

xdebug_debug_zval('a

');//修改a

$a = range(0, 3

);xdebug_debug_zval('a

');

執行結果:

採用了 引用(&),所以 從第二步開始 refcount = 2,is_ref = 1(引用) ,引用狀態下不開闢新的記憶體位址;

php 中 object 本身就是引用傳值(自 php 5 起,new 自動返回引用,因此在此使用 =& 已經過時了並且會產生 e_strict 級別的訊息。)

//

物件本身就是引用傳遞

class

person

$p1 = new

person;

xdebug_debug_zval('p1

');$p2 =$p1;

xdebug_debug_zval('p1

');$p2->name = 'ls'

;xdebug_debug_zval('p1

');

執行結果:

object 賦值情況下 會共享記憶體位址,但本身又不是引用。

//

unset 只會取消引用,不會銷毀空間

$a = ''

;xdebug_debug_zval('a

');$b = &$a;

xdebug_debug_zval('a

');unset($b);

xdebug_debug_zval('a

');

執行結果:

所以在第一步的時候  refcount = 0 

對應 引用(&),unset只會取消引用,而不會銷毀記憶體位址

通過對 is_ref 判斷是否是引用變數,如果是引用變數,修改時直接修改(原記憶體位址),否則,則需要進行 分離(重新開闢新位址),而  usset 變數只是取消該變數的引用,而不會消除記憶體位址,只有當refcount = 0;記憶體才有可能被**

php引用變數

php引用變數 cow copy on write php變數在賦值的時候不會新開闢乙個記憶體空間,只有在變數有改變操作的時候才會開闢新的記憶體空間 定義變數a a range 0,10000 var dump memory get usage 將變數a賦值給變數b b a var dump mem...

php 引用變數

定義 不同變數名指向同一變數內容 位址 符號 定義變數 a,記憶體開闢乙個空間儲存 a a指向該空間 a a 定義變數 b,因為cow copy on write 特性,a,b都引向 a b a 如果改變 a的值,記憶體又開闢空間儲存,a指向該空間。此時 b還是指向原來的空間 a hello 可以使...

PHP引用變數

在php中引用意味著用不同的名字訪問同乙個變數內容使用 符號 定義變數 a range 0 100 var dump memory get usage int 399112 xdebug debug zval a a refcount 1,is ref 0 recount表示變數指向的記憶體位址引用...