php引用變數的概念和定義方式
概念:在php中引用意味著不同的名字訪問同乙個變數內容。
定義方式:使用&符號
工作原理:
<?phpheader("content-type:text/html;charset=utf-8");
//定義乙個變數a
$a = range(0,100);
var_dump(memory_get_usage());//
檢視記憶體使用情況
echo "
";//
定義變數b,將a變數的值賦值給b,遵循寫時改變(copy on write)的原則
$b = $a
;var_dump
(memory_get_usage());
echo "
";//
對a進行修改
$a = range(0,100);
var_dump
(memory_get_usage());
?>
三次輸出的記憶體使用情況分別為:int(144640) 、int(144688) 、int(153368),可知,由於遵循寫時改變的原則,a指向了新的空間,故第三次列印記憶體占用時數值明顯增大。
<?phpheader("content-type:text/html;charset=utf-8");
//定義乙個變數a
$a = range(0,100);
var_dump(memory_get_usage());//
檢視記憶體使用情況
echo "
";//
定義變數b,將a變數的值賦值給b,遵循寫時改變(copy on write)的原則
$b = &$a; //改為引用複製,此時a和b永遠指向同乙個空間,而不會複製var_dump
(memory_get_usage());
echo "
";//
對a進行修改
$a = range(0,100);
var_dump
(memory_get_usage());
?>
此時,列印出來的結果分別為:int(144640) 、int(144688) 、int(144680),區別不大,由此可知,a和b還是指向同一空間,當對a進行修改時,就是對a和b共同指向的空間內容的修改。
需要指出的是,unset()函式只會取消引用,而不會銷毀空間
<?phpheader("content-type:text/html;charset=utf-8");
$a = 1;
$b = &$a
;unset($b
);echo
$a."\n"; //
結果輸出1
?>
物件也遵循引用思想,而不是寫時複製,例如:
<?phpheader("content-type:text/html;charset=utf-8");
class
person
$p1 = new
person();
$p2 = $p1
;$p2->name = "xiaolinzi";
?>
在這個例子中,p1和p2同時指向同乙個空間,若$p2->name改變,則是該空間的內容進行修改。
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表示變數指向的記憶體位址引用...