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

不言
發布: 2023-03-24 13:52:01
原創
1693 人瀏覽過

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


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

<?php 



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



$b = $a;



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







var_dump($a);



var_dump($b);



?>
登入後複製


 
此時的$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);
登入後複製

執行結果:
 

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

NULL 

NULL
登入後複製


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

$b = $a;

$c =& $a;
登入後複製


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

$a = null;
登入後複製


 

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

$f = new Person();

$b = clone $f; //创建一个对象副本
登入後複製






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

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板