您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)php實現(xiàn)對象傳值方式的具體案例,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
變量賦值與對象賦值對比
<?php // 聲明一個變量并賦值 $a = 1; // 將數(shù)據(jù)類型的值 賦值 給一個變量 $b = $a; // 修改$a的值 $a = 2; // $a和$b是兩個獨立的內(nèi)存空間修改其中一個另一個不受影響 echo $b; // 1 class Person { public $name; public $age; } // 將對象類型的數(shù)據(jù) 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向?qū)ο笾?對象的傳值方式 $p->name = 'jesse'; // 若是成功修改值,則是引用傳值 echo $p->name; // jesse ?>
案例解釋:
在這里通過變量的賦值方式 與 對象的賦值方式方式相對比,代碼第5行中的賦值方式為“拷貝賦值”,故在修改其源值($a的值)的情況下,$b的值不受影響。$a與$b的內(nèi)存關(guān)系圖如下:
而代碼20行將數(shù)據(jù)類型賦值給$p變量,通過$p修改對象內(nèi)部的值成功,對比變量的傳值方式,證明這是引用傳值,內(nèi)存關(guān)系圖如下:
而代碼20行將數(shù)據(jù)類型賦值給$p變量,通過$p修改對象內(nèi)部的值成功,對比變量的傳值方式,證明這是引用傳值,內(nèi)存關(guān)系圖如下:
<?php class Person { public $name; public $age; // 將對象類型的數(shù)據(jù) 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向?qū)ο笾?對象的傳值方式 $p->name = 'jesse'; // 將對象賦予另一變量 $m = $p; // 另一變量修改屬性值 $m->name = 'Marry'; // 輸出源變量 賦值變量訪問內(nèi)部屬性的結(jié)果 echo $p->name, $m->name; } ?>
第12行代碼為本篇文章的最“點睛”的代碼,等號右邊為是一個對象,左邊是一個變量,那么犀利的問題來了,$m是將對象拷貝一份?還是按引用傳遞呢?該代碼內(nèi)存關(guān)系如下:
所以,最后兩個對象的屬性值均被修改為Marry!!!
那按引用傳值會是怎么個情況?
<?php class Person { public $name; public $age; } // 將對象類型的數(shù)據(jù) 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向?qū)ο笾?對象的傳值方式 $p->name = 'jesse'; // 將對象賦予另一變量 $m = &$p; // 另一變量修改屬性值 $m->name = 'Marry'; // 輸出源變量 賦值變量訪問內(nèi)部屬性的結(jié)果 echo $p->name, $m->name; ?>
看完上述內(nèi)容,你們對php實現(xiàn)對象傳值方式的具體案例有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。