前言
本系列文章主要是根據實戰視頻《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引用(&)使用詳解