php的對象傳值與引用傳值代碼實例講解
變量賦值與對象賦值對比
<?php // 聲明一個變量並賦值 $a = 1; // 將數據類型的值 賦值 給一個變量 $b = $a; // 修改$a的值 $a = 2; // $a和$b是兩個獨立的內存空間修改其中一個另一個不受影響 echo $b; // 1 class Person{ public $name; public $age; } // 將對象類型的數據 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向對象中 對象的傳值方式 $p->name = 'jesse'; // 若是成功修改值,則是引用傳值 echo $p->name; // jesse ?>
案例解釋:
在這裡通過變量的賦值方式與對象的賦值方式方式相對比,代碼中 $b = a ; 的 賦 值 方 式 為 “ 拷 貝 賦 值 ” , 故 在 修 改 其 源 值 ( a; 的賦值方式為“拷貝賦值”,故在修改其源值( a;的賦值方式為“拷貝賦值”,故在修改其源值(a的值)的情況下, b 的 值 不 受 影 響 。 b的值不受影響。 b的值不受影響。a與$b的內存關系圖如下:
而代碼 p − > n a m e = ′ j e s s e ′ ; 將 數 據 類 型 賦 值 給 p->name = ‘jesse’;將數據類型賦值給 p−>name=′jesse′;將數據類型賦值給p變量,通過$p修改對象內部的值成功,對比變量的傳值方式,證明這是引用傳值,內存關系圖如下:
<?php class Person { public $name; public $age; // 將對象類型的數據 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向對象中 對象的傳值方式 $p->name = 'jesse'; // 將對象賦予另一變量 $m = $p; // 另一變量修改屬性值 $m->name = 'Marry'; // 輸出源變量 賦值變量訪問內部屬性的結果 echo $p->name, $m->name; } ?>
$m = p ; 代 碼 為 本 篇 文 章 的 最 “ 點 睛 ” 的 代 碼 , 等 號 右 邊 為 是 一 個 對 象 , 左 邊 是 一 個 變 量 , 那 麼 犀 利 的 問 題 來 瞭 , p;代碼為本篇文章的最“點睛”的代碼,等號右邊為是一個對象,左邊是一個變量,那麼犀利的問題來瞭, p;代碼為本篇文章的最“點睛”的代碼,等號右邊為是一個對象,左邊是一個變量,那麼犀利的問題來瞭,m是將對象拷貝一份?還是按引用傳遞呢?該代碼內存關系如下:
所以,最後兩個對象的屬性值均被修改為Marry!!!
那按引用傳值會是怎麼個情況?
<?php class Person { public $name; public $age; } // 將對象類型的數據 賦值 給一個變量 $p = new Person; // 通過對屬性修改值,來確定面向對象中 對象的傳值方式 $p->name = 'jesse'; // 將對象賦予另一變量 $m = &$p; // 另一變量修改屬性值 $m->name = 'Marry'; // 輸出源變量 賦值變量訪問內部屬性的結果 echo $p->name, $m->name; ?>
到此這篇關於php的對象傳值與引用傳值代碼實例講解的文章就介紹到這瞭,更多相關php的對象傳值與引用傳值內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Android單選按鈕RadioButton的使用方法
- Java this關鍵字的使用案例詳解
- php訪問對象中的成員的實例方法
- C語言中typedef的用法以及#define區別詳解
- java關於list集合做刪除操作時的坑及解決