PHP中=賦值操作符對(duì)不同數(shù)據(jù)類型的不同行為
首先解釋賦值操作符=的行為,看下面的例子:
$i = 0;
$j = $i;
$j = 0;
echo $j; // 打印輸出0
$arr = array(0);
$arr2 = $arr;
$arr2[0] = 1;
echo $arr[0]; //打印輸出0
class B
{
public $i = 0;
}
$b = new B();
$c = $b;
$c->i = 1;
echo($b->i); // 打印輸出1
從這個(gè)例子可以看出,如果=操作符右邊的變量為基本數(shù)據(jù)類型或者數(shù)組,那么=操作符把右邊變量的一份拷貝賦值給左邊變量;如果右邊變量不是基本數(shù)據(jù)類型或者數(shù)組,如class,那么=會(huì)把一個(gè)指向右邊變量的引用賦值給左邊變量。注意:是指向右邊變量的引用,而不是指向右邊變量所指的內(nèi)容區(qū)域的引用;具體看下邊的例子
$a = new A();
$b_a = $a;
$b_r = &$a;
$b_a = null;
var_dump($a); //打印 object(A)[2],$a所指向的內(nèi)容還在
$b_r = null;
var_dump($a); // 打印 null,$a所指向的內(nèi)容被清除了
上面的例子也說明了,如果用 $var = &$a 的方式賦值的話,用$var=null來銷毀變量$var的話事實(shí)上是把$var所指內(nèi)容被設(shè)置null了,其實(shí)這句話也暗示了任何一個(gè)指向該內(nèi)容區(qū)域的引用變量均可用來銷毀該內(nèi)容區(qū)域的內(nèi)容。所以,要銷毀變量$var的話用 unset($var) 。PS:事實(shí)上一這種方式賦值$var只是個(gè)引用,占用不了多少內(nèi)存,要不要銷毀沒所謂,這里這是說下必須用unset的方式銷毀。
下面則是《用戶手冊(cè)》中的“引用的解釋”的例子:
$a =& $b;
下邊有這么一句解釋:
這意味著 $a 和 $b 指向了同一個(gè)變量。
注: $a 和 $b 在這里是完全相同的,這并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一個(gè)地方。
引用是什么?
在 PHP 中引用意味著用不同的名字訪問同一個(gè)變量?jī)?nèi)容。這并不像 C 的指針,替代的是,引用是符號(hào)表別名。注意在 PHP 中,變量名和變量?jī)?nèi)容是不一樣的,因此同樣的內(nèi)容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身――變量名是目錄條目,而變量?jī)?nèi)容則是文件本身。引用可以被看作是 Unix 文件系統(tǒng)中的緊密連接。
關(guān)于“引用是什么”的一點(diǎn)解釋:
int i = 0;
int j = 0;
int *p = &i;
p = &j;
上面的代碼中,p是一個(gè)指向i的內(nèi)存地址的指針,而*p才是其中的內(nèi)容;p=&j指向改變了p指針的指向,用*p=111的表達(dá)式才會(huì)改變i的內(nèi)容。而PHP中則不是,下面的例子
$i = 0;
$p = &$i;
$p = 111則馬上會(huì)改變$i的值。
相關(guān)文章
PHP實(shí)現(xiàn)數(shù)組根據(jù)某個(gè)單元字段排序操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)組根據(jù)某個(gè)單元字段排序操作,結(jié)合實(shí)例形式分析了php基于array_multisort函數(shù)降序排序操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08PHP加密函數(shù) Javascript/Js 解密函數(shù)
php加密,js解密,貌似沒什么意義,主要是key在js中會(huì)被看到,不過在某些地方可能會(huì)用到2013-09-09PHP的mysqli_query參數(shù)MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區(qū)別
這篇文章主要介紹了PHP的mysqli_query參數(shù)MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區(qū)別,本文給出了這兩個(gè)參數(shù)的5個(gè)區(qū)別,需要的朋友可以參考下2014-09-09phpmyadmin中配置文件現(xiàn)在需要絕密的短語(yǔ)密碼的解決方法
phpmyadmin中配置文件現(xiàn)在需要絕密的短語(yǔ)密碼的解決方法...2007-02-02php對(duì)數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的方法
這篇文章主要介紹了php對(duì)數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的方法,通過自定義函數(shù)實(shí)現(xiàn)對(duì)數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的功能,涉及php操作數(shù)組的相關(guān)技巧,需要的朋友可以參考下2015-05-05php實(shí)現(xiàn)購(gòu)物車功能(以大蘋果購(gòu)物網(wǎng)為例)
本文主要介紹了php實(shí)現(xiàn)購(gòu)物車功能(以大蘋果購(gòu)物網(wǎng)為例)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03php站內(nèi)搜索關(guān)鍵詞變亮的實(shí)現(xiàn)方法
這篇文章主要介紹了php站內(nèi)搜索關(guān)鍵詞變亮的實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了數(shù)據(jù)庫(kù)表的創(chuàng)建及針對(duì)數(shù)據(jù)庫(kù)的搜索關(guān)鍵字高亮的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12php通過隱藏表單控件獲取到前兩個(gè)頁(yè)面的url
這篇文章主要介紹了php通過隱藏表單控件獲取到前兩個(gè)頁(yè)面的url,此法比較實(shí)用,需要的朋友可以參考下2014-09-09