什麼是php引用變數?PHP中引用是如何?

來源:互聯網
上載者:User
這篇文章給大家介紹的內容是關於 什麼是php引用變數?PHP中引用是如何?,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

概念:

引用:在PHP中,不同的變數名字訪問同一個變數的內容,成為引用,用&符號表示。

引用工作原理:

(1)PHP在記憶體中儲存的原理:

<?php    $a = range(1, 100);    $b = $a; ?>

因為PHP中存在COW(Copy On Write)機制,所以

a; 以上代碼在記憶體中可表示為:

只有當對

a的儲存,此時會重新開闢一個空間;這就是PHP的COW機制。即:

<?php    $a = range(1, 100);       $b = $a;        $a = range(1, 100);?>

這樣雖然沒有改變

a。可以用PHP函數 memory_get_usage() 查看記憶體使用量情況用以證明。

(2)PHP中引用的實現原理

<?php    $a = range(1, 100);        $b = &$a;?>

此時因為有引用(&),則在記憶體中

a最開始分配的記憶體,並且是不會改變的,此時

然後如果此時改變$a的值:

<?php    $a = range(1, 100);    memory_get_usage();        $b = &$a;    memory_get_usage();        $a = range(1,1000);    memory_get_usage();?>


可以看到記憶體中不會重新開闢一塊空間,因為引用是將這塊地址永遠的分配給了

b,所以改變

a和$b的值都會改變。也可用memory_get_usage()函數進行查看。

(3)PHP中的zval結構體(變數容器)

我們知道PHP中的變數都是儲存在zval結構體中的,引用也可以通過查看zval結構體中的儲存情況去查看。

<?php    $a = range(1, 100);    xdebug_debug_zval('a');        $b = &$a;?>

在使用xdebug_debug_zval();函數需要安裝PHP的xdebug擴充。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.