首頁 >後端開發 >php教程 >PHP引用變數知識詳解

PHP引用變數知識詳解

不言
不言原創
2018-04-28 13:45:232534瀏覽


這篇文章主要介紹了關於PHP引用變數知識詳解,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

  • 概念:在PHP中引用意味著用不同的名字存取同一個變數內容;

  • 定義方式:PHP使用'& '定義引用變數;

  • 當不使用引用時,變數採取寫入時複製機制機制(COW):寫入時會複製一份記憶體進行修改,例如

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = $a; //此时$b和$a 指向同一个内存空间
var_dump(memory_get_usage());
//当a或b发生写入时,才会复制一块内存进行修改
$a = range(0,1000);
var_dump(memory_get_usage());

運行結果:第一次和第二次列印時記憶體使用量相差不多,第三次發生明顯變化,說明當a進行寫入操作時,記憶體發生了複製。


  • 而當時用引用時變數將指向同一記憶體空間,寫入操作時不會改變

//定义一个变量
$a = range(0,1000);
var_dump(memory_get_usage()); //打印内存使用量
//定义一个变量b
$b = &$a; //将a的空间赋值给b,a与b指向同一空间
var_dump(memory_get_usage());
//当a或b发生写入时,内存不会发生复制
$a = range(0,1000);
var_dump(memory_get_usage());

運行結果:記憶體始終未發生明顯變化

透過zval變數容器進行驗證

//通过zval变量容器打印
$a = range(0,3);
xdebug_debug_zval('a');//打印 指向内存空间的变量数,和是否被引用
$c =&$a;
xdebug_debug_zval('a');
$c = range(0,3);
xdebug_debug_zval('a');

運行結果:

當對c進行寫入操作時仍有2個變數指向內存,未發生寫入時複製



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

  • 在php中物件本身就是引用傳值,不需要使用引用符號

  • class Person{
        public $name  = "zhangsan";
    }
    $p1 = new Person();
    xdebug_debug_zval('p1');
    
    $p2 = $p1;
    xdebug_debug_zval('p1');
    
    $p2->name = "lesi";
    xdebug_debug_zval('p1');


相關推薦:

php引用定義與引用傳遞參數實例用法詳解


以上是PHP引用變數知識詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn