深入理解PHP變量的值類型和引用類型
在PHP中,大部分變量類型,如字符串,整型,浮點(diǎn),數(shù)組等都是值類型的,而類和對象是引用類型,在使用的時(shí)候,需要注意這一點(diǎn)。
看到網(wǎng)友在討論P(yáng)HP的&符號,要徹底理解它的用法,就有必要討論一下變量的兩種形式。
PHP的變量在內(nèi)存中是這樣存儲的,變量保存的并不直接是值的內(nèi)容,而是地址。例如:
$a = 1;
我們看起來,似乎變量$a直接存儲了 1 這個(gè)值。而實(shí)際情況是,PHP解釋器創(chuàng)建了變量$a,將值:1 存入內(nèi)存中的某個(gè)地方,再將值的地址存到變量$a中。
需要取值時(shí),先找到變量$a中的地址,再根據(jù)地址找到變量的值。
往下看:
echo $a;
會(huì)輸出1,PHP解釋器會(huì)這樣完成這一樣代碼:找到$a中存儲的地址,根據(jù)地址找到存在內(nèi)存某個(gè)地方的值,輸出到屏幕。
看似一行簡單的代碼,流程卻是這樣的。
再往下看:
$a = 1; $b = &$a;
這里的變量$b 做了一個(gè)有趣的操作,&符號取出了$a變量中存儲的地址,并存儲到$b變量。
那么,如果使用下面代碼:
echo $b;
結(jié)果也將是輸出1,PHP解釋器先取出$b中存儲的地址,再根據(jù)地址找到值。如果我們做下面的操作:
$a = 2; echo $b; //輸出2
會(huì)發(fā)現(xiàn)改變$a的值,$b也跟著變了。其實(shí)反過來,改變$b的值,$a的值也會(huì)跟這變。
到這一步,我們可以確定,變量$a和$b存儲了相同的地址,指向的值是一樣的。
那么,我們可以得出結(jié)論:它們表示的是同一個(gè)變量。
進(jìn)一步總結(jié),可以得出:如果兩個(gè)變量存儲了相同的地址,它們就是同一個(gè)變量。
了解了著一些內(nèi)容,我們開始介紹值類型和引用類型。
我們先看下面的代碼:
$a = 1; $b = $a; $a = 2; echo $b; //輸出 1
將$a的值賦給$b,改變$a的值后,$b的值依然不變,也就是說$a和$b是兩個(gè)不同的變量,指向不同的地址。這種賦值時(shí)會(huì)創(chuàng)建不同的變量的形式我們稱之為值類型。
再看:
class User{ public $name = ‘Tome‘; } $a = new User; $b = $a; $a->name = ‘Jim‘; echo $b->name; //輸出 Jim
同樣將$a的值賦給$b,改變$a后,$b也跟著變了,也就是說$a和$b是同一個(gè)變量,指向相同的地址。這種賦值時(shí)不會(huì)創(chuàng)建新的變量的形式我們稱之為引用類型。
- PHP中函數(shù)內(nèi)引用全局變量的方法
- 淺談PHP變量作用域以及地址引用問題
- PHP中變量引用與變量銷毀機(jī)制分析
- 淺談PHP中關(guān)于foreach使用引用變量的坑
- PHP變量的定義、可變變量、變量引用、銷毀方法
- php引用地址改變變量值的問題
- 一道關(guān)于php變量引用的面試題
- php 變量引用與變量銷毀機(jī)制詳細(xì)介紹
- php中引用&的用法分析【變量引用,函數(shù)引用,對象引用】
- 淺析PHP原理之變量分離/引用(Variables Separation)
- 詳解PHP變量傳值賦值和引用賦值變量銷毀
- php 多個(gè)變量指向同一個(gè)引用($b = &$a)用法分析
相關(guān)文章
PHP運(yùn)用foreach神奇的轉(zhuǎn)換數(shù)組(實(shí)例講解)
下面小編就為大家分享一篇PHP運(yùn)用foreach神奇的轉(zhuǎn)換數(shù)組(實(shí)例講解),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02使用php重新實(shí)現(xiàn)PHP腳本引擎內(nèi)置函數(shù)
使用php重新實(shí)現(xiàn)PHP腳本引擎內(nèi)置函數(shù)...2007-03-03php實(shí)現(xiàn)統(tǒng)計(jì)IP數(shù)及在線人數(shù)的示例代碼
這篇文章主要介紹了php實(shí)現(xiàn)統(tǒng)計(jì)IP數(shù)及在線人數(shù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07從零開始學(xué)YII2框架(六)高級應(yīng)用程序模板
這篇文章主要介紹了YII2框架學(xué)習(xí)筆記之高級應(yīng)用程序模板,深入淺出從安裝,配置到使用方法都做了介紹,希望對大家有所幫助2014-08-08php設(shè)計(jì)模式之抽象工廠模式分析【星際爭霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之抽象工廠模式,結(jié)合星際爭霸游戲案例形式分析了PHP抽象工廠模式的具體原理、使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-01-01Laravel中批量賦值Mass-Assignment的真正含義詳解
Laravel作為在國內(nèi)國外都頗為流行的PHP框架,風(fēng)格優(yōu)雅,其擁有自己的一些特點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Laravel中批量賦值Mass-Assignment的真正含義,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09