PHP引用變數知識詳解

不言
發布: 2023-03-25 06:42:01
原創
2479 人瀏覽過


這篇文章主要介紹了關於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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!