PHP變量的值類型和引用類型


PHP 變量在內存中保存的並不直接是值的內容而是值的地址。比如:

$a = 1;

從表面上看起來似乎是 $a 直接存儲了 1 這個值。但是實際情況是,PHP 解釋器創建了變量 $a ,

將值 1 存入內存中的某個地方,再將值的地址存到變量中。

需要取值時,先找到變量中 $a 的地址,再根據地址找到變量的值。

比如:

echo $a;

當我們執行上面這個語句時,會輸出 1 ,但是 PHP 解釋器會完成這樣一段代碼:找到 $a 中存儲

的地址(即:先取 $a 的地址),根據地址找到存在內存中某個地方的值,最后輸出屏幕上。

用代碼表示一下這個過程:

$a = 1;
$b = &$a;

我們看到上面出現了一個 & 符號,這個符號是取地址符,可以取出變量 $a 中存的地址,並存儲到變量

$b 中,再使用輸出語句:

echo $b;

結果也是輸出 1 ,PHP 解釋器先取出 $b 中存的地址,再根據地址找到值。下面我們再做一個演示:

$a = 1;
$b = &$a;
$a = 2;
echo $b;

會發現改變 $a 的值,$b 的值也跟着改變了。其實改變 $b 的值,$a 的值也會隨着改變。

到這一步,我們能確定的是在 $a 和 $b 中存儲了相同的地址,所以,他們指向的值也是一樣的。

結論1:如果兩個變量存儲了相同的地址,它們就是同一個變量。

 

下面我們來看一下 值類型 和 引用類型。

先看一段代碼:

$a = 1;
$b = $a;
$a = 2;
echo $b; // 輸出 1

 

將 $a 賦值給 $b,改變 $a 的值,$b 的值不變,根據上面我們得到的結論,$a 和 $b 是兩個不同的變量,

指向不同的地址。

結論2:賦值時會創建不同的變量的形式稱之為值類型。

 

再看一段代碼:

class User {
   public $name = "Tome";
}

$a = new User();
$b = $a;
$a->name = "Joe";

echo $b->name;// 輸出 Joe

在這里我們同樣把 $a 的值賦值給 $b,改變 $a 后,$b 的值也跟着發生了變化,根據結論1我們知道 $a 和 $b

是同一個變量,指向相同的地址。

結論3:賦值時不會創建新的變量的形式稱之為引用類型。

 

在 PHP 中字符串、整型、浮點、數組等這些都是值類型,而類和對象是引用類型。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM