首頁  >  文章  >  後端開發  >  圖文解析PHP物件的賦值運算是“傳值”還是“傳址”

圖文解析PHP物件的賦值運算是“傳值”還是“傳址”

不言
不言原創
2018-04-20 11:48:511673瀏覽

這篇文章介紹的內容是關於圖文解析PHP對象的賦值操作是“傳值”還是“傳址”,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下


我們知道,變數預設總是傳值賦值。也就是說,當將一個表達式的值賦予一個變數時,整個原始表達式的值會被賦值到目標變數。這意味著,當一個變數的值賦予另一個變數時,改變其中一個變數的值,將不會影響到另一個變數。
 <br>舉個簡單例子:
 

<?php 



$a = &#39;hello world&#39;;



$b = $a;



$a = &#39;bey world&#39;;







var_dump($a);



var_dump($b);



?>


 <br>此時的$b = $a,在記憶體中的存貯大致是這樣子的:

 <br>但是當一個物件被實例化後,物件的傳遞並非傳值,而是傳遞該物件的位址。也就是說,不會複製整個對象,因為這樣做既耗時又耗記憶體。
同樣舉個簡單例子:
 

 <br>
<?php
class Person
{
    public $name;
    public $age;
}
 
$a = new Person();
$b = $a;
$c = &$a;
$a->name = &#39;gavin&#39;;
$a = null;
 
var_dump($b);
var_dump($a);
var_dump($c);

執行結果:
 <br>

object(Person)#1 (2) { ["name"]=> string(5) "gavin" ["age"]=> NULL } 

NULL 

NULL


 <br>上面範例中變數的操作過程大致如下:
 

$b = $a;

$c =& $a;


 <br>當把一個物件實例賦給一個新變數時,新變數會存取同一個實例。
引用賦值(&)意味著新的變數引用了原始變量,換言之,成為其"別名" 或 "指向"。改動新的變數將影響到原始變量,反之亦然。

 <br> 

$a = null;


 <br>
也許你會問,既然直接賦值不是複製對象,那如何才能複製物件呢? PHP複製複製物件使用clone運算子:
 

$f = new Person();

$b = clone $f; //创建一个对象副本






############################ ###透過本文,我們一起分享了在PHP中物件的賦值操作,傳遞的是物件位址,而不是複製物件。 PHP中可以使用clone操作符來複製物件。能力有限,如果大家發現本文有"bug",歡迎不吝賜教,同時如果大家有其他疑問或見解,歡迎一起分享交流。我們共同學習,共同交流,共同進步。 #########相關推薦:############php物件複製的實作方法##############

以上是圖文解析PHP物件的賦值運算是“傳值”還是“傳址”的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn