1. 程式人生 > >php引用變量

php引用變量

改變 \n range 會銷 變量 方式 ont 原理 內存使用情況

php引用變量的概念和定義方式

概念:在php中引用意味著不同的名字訪問同一個變量內容。

定義方式:使用&符號

工作原理:

<?php
header("content-type:text/html;charset=utf-8");
//定義一個變量a
$a = range(0,100);
var_dump(memory_get_usage());//查看內存使用情況
echo "</br>";
//定義變量b,將a變量的值賦值給b,遵循寫時改變(copy on write)的原則
$b = $a;
var_dump(memory_get_usage());
echo "</br>";
//對a進行修改 $a = range(0,100); var_dump(memory_get_usage()); ?>

三次輸出的內存使用情況分別為:int(144640) 、int(144688) 、int(153368),可知,由於遵循寫時改變的原則,a指向了新的空間,故第三次打印內存占用時數值明顯增大。

<?php
header("content-type:text/html;charset=utf-8");
//定義一個變量a
$a = range(0,100);
var_dump(memory_get_usage());//查看內存使用情況
echo "</br>";
//定義變量b,將a變量的值賦值給b,遵循寫時改變(copy on write)的原則
$b = &$a; //改為引用復制,此時a和b永遠指向同一個空間,而不會復制 var_dump(memory_get_usage()); echo "</br>"; //對a進行修改 $a = range(0,100); var_dump(memory_get_usage()); ?>

此時,打印出來的結果分別為:int(144640) 、int(144688) 、int(144680),區別不大,由此可知,a和b還是指向同一空間,當對a進行修改時,就是對a和b共同指向的空間內容的修改。

需要指出的是,unset()函數只會取消引用,而不會銷毀空間

<?php
header
("content-type:text/html;charset=utf-8"); $a = 1; $b = &$a; unset($b); echo $a."\n"; //結果輸出1 ?>

對象也遵循引用思想,而不是寫時復制,例如:

<?php
header("content-type:text/html;charset=utf-8");
class Person{
    public $name = "xiaolin";
}
$p1 = new Person();
$p2 = $p1;
$p2->name = "xiaolinzi";
?>

在這個例子中,p1和p2同時指向同一個空間,若$p2->name改變,則是該空間的內容進行修改。

php引用變量