PHP基礎複習(一)——引用變量

前言

本系列文章主要是根據實戰視頻《360大牛:全面解讀PHP面試》學習過程中記錄的學習筆記,期間也會加入查找資料和平時學習中學習到的知識。希望可以鞭策自己不斷夯實基礎,平時也要查漏補缺。

引用變量概念

在PHP中引用意味着用不同的名字訪問同一個變量內容。

定義方式

使用&符號,也就是在變量或者函數、對象等前面加上&符號。

 

工作原理

<?php
  
  $a = range(0, 1000);

/*
   此時,不會爲$b額外生成一份內存空間,因爲php的COW機制(Copy On Write)。
   當$a或$b其中一個變量發生改變時,纔會再開闢一份新的內存空間。
   COW(copy on write)是內存優化的常見手段,在php中也採用了這種方式來優化內存。
   寫時複製,即只有當對其中一個或多個變量進行寫操作的時候,纔會複製一份內存,對其內容進行修改。
*/
  $b = $a;      //此時均指向同一內存空間


  $a = range(0, 1000);  //此時$a發生了寫操作,會爲$a複製一份內存空間,並且對值進行修改


//===============================================================

    $a = range(0, 1000);

    $b = &$a;      //無論何時均指向同一內存空間

    $a  = range(0, 1000);

面試引申考點

unset

unset()只會取消引用,不會銷燬內存空間

<?php
   
    $a = 1;

    $b = &$a;

    unset($b);    //只是把$b對$a的引用取消   http://www.php.net/manual/zh/function.unset.php

    echo $a . "\n";      //輸出結果   1

 

對象的複製

在PHP中,對象本身就是引用傳遞。

<?php

class Person{

    public $name = "zs";

}


$p1 = new Person();

$p2 = $p1;

$p2->name = 'ls';       //此時$p1和$p2的$name的值均爲 ls 。此爲對象的淺複製;若想實現深複製,需要重寫__clone()方法

    

解題方法

       針對引用變量的相關考察點,一般使用畫圖分析法,使用一個小長方形代表一個變量指向的內存,然後分析程序每一步中,變量指向的內存是否發生改變,一邊對圖修改一邊分析。

 

 

參考鏈接:

       https://blog.csdn.net/qq_38253837/article/details/80340505

       https://www.cnblogs.com/gengyi/p/6399752.html        PHP引用(&)使用詳解

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章