對象用&傳遞參數和對象用作普通參數傳遞的區別
對象傳值方式中叫:引用傳值,地址傳值
與用&符號傳遞:也叫引用傳遞
由於這兩個也叫引用,而且作用看似很相似,所以很容易混淆。
傳值方式中的引用傳值:就是變量傳遞的內容是地址。
用&符號傳遞的引用傳遞:用了&就是變量的別名。比如一個人有一個名字,有的人也有一個小名,小名就是這里別名,都是同一人。
別名從本人的理解 同一個內存它有兩個名字 ,但不是地址傳值。
用文字比較難說明
代碼案例理解
- <?php
- class A3 {
- public $foo = 'empty';
- }
- class B3 {
- public $foo = 'empty';
- public $bar = 'hello';
- }
- function normalAssignment($obj) { //對象用作普通參數
- $obj->foo = 'changed';
- $obj = new B3; //這里說明對象是普通的地址傳值
- }
- function referenceAssignment(&$obj) {//對象用&傳值
- $obj->foo = 'changed';
- $obj = new B3; //這里體現了區別 &引用的別名
- }
- $a = new A3;
- normalAssignment($a);
- echo get_class($a), "\n";//輸出A3
- echo "foo = {$a->foo}\n";//輸出foo = changed
- referenceAssignment($a);
- echo get_class($a), "\n";//輸出B3 關鍵理解這里為什么
- echo "foo = {$a->foo}\n";//foo = empty
- echo "bar = {$a->bar}\n";//bar = hello
- ?>