对象用&传递参数和对象用作普通参数传递的区别
对象传值方式中叫:引用传值,地址传值
与用&符号传递:也叫引用传递
由于这两个也叫引用,而且作用看似很相似,所以很容易混淆。
传值方式中的引用传值:就是变量传递的内容是地址。
用&符号传递的引用传递:用了&就是变量的别名。比如一个人有一个名字,有的人也有一个小名,小名就是这里别名,都是同一人。
别名从本人的理解 同一个内存它有两个名字 ,但不是地址传值。
用文字比较难说明
代码案例理解
- <?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
- ?>