首頁 >後端開發 >php教程 >php引用變數是什麼? php引用變數的實例講解

php引用變數是什麼? php引用變數的實例講解

不言
不言原創
2018-09-08 15:47:562484瀏覽

php引用變數是什麼?如何定義引用變數?本篇文章將從記憶體空間簡述PHP引用變數的基本概念、工作方式,以及一個常見的實例。

概念

什麼是引用變量,在PHP當中,用什麼符號定義引用變數?

不同的名字存取同一個變數內容,使用&表示。

COW(copy on write)

記憶體最佳化的常見手段,在php中也採用了這種方式來最佳化記憶體。

寫時複製,即只有當對其中一個或多個變數進行寫入操作的時候,才會複製一份內存,對其內容進行修改。

在PHP中使用memory_get_usage()觀察記憶體變化

#示範

未使用&(引用變數)

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = $a;`
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

運行結果:

php引用變數是什麼? php引用變數的實例講解

內存在第一次和第二次並沒有太大的差異,第三次產生較大差異

使用&

        $a = range(0,1000);
        var_dump(memory_get_usage());
        $b = &$a;
        var_dump(memory_get_usage());
        $a = range(0,1000);
        var_dump(memory_get_usage());

運行結果:

php引用變數是什麼? php引用變數的實例講解

在使用引用傳值內存解析分析:

php引用變數是什麼? php引用變數的實例講解

$a在記憶體中佔據A記憶體空間,$b=&$ a$b指向同一記憶體空間,當$a改變時$b所佔據的記憶體空間會跟隨$a變化

unset

unset() 只會取消引用不會銷毀空間

$a=1;
$b=&$a;
unset($b);
echo $a;

輸出結果:1

記憶體空間分析:  

php引用變數是什麼? php引用變數的實例講解

#$a被賦值$b=&$a之後$a與$b直行相同記憶體空間,當unset($b)時取消了$b對$a的引用,使$b不在指向$a的內存空間

題外話

物件本身就是引用傳遞

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

運行結果:

php引用變數是什麼? php引用變數的實例講解

#結果分析:

php引用變數是什麼? php引用變數的實例講解

物件被實例後經引用傳遞之後$p1 $p2指向的始終是同一記憶體空間

案例

     <?php     
     $data = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];
    
     foreach($data as $key => $val)
     {
          $val = &$data[$key];
     }
    var_dump($data);

寫出如上程式的輸出結果?
程式運行時,每一次迴圈結束後變數$data的值是什麼?
程式執行完成後,變數$data的值是什麼?

記憶體變更與解析:

php引用變數是什麼? php引用變數的實例講解

#相關推薦:

php變數引用與物件引用詳解介紹_PHP教學

php變數引用與物件引用詳解介紹

以上是php引用變數是什麼? php引用變數的實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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