php 对象用&传递参数 与 对象用作普通参数的区别


对象用&传递参数和对象用作普通参数传递的区别

对象传值方式中叫:引用传值,地址传值

与用&符号传递:也叫引用传递

由于这两个也叫引用,而且作用看似很相似,所以很容易混淆。

传值方式中的引用传值:就是变量传递的内容是地址。

用&符号传递的引用传递:用了&就是变量的别名。比如一个人有一个名字,有的人也有一个小名,小名就是这里别名,都是同一人。

      别名从本人的理解 同一个内存它有两个名字 ,但不是地址传值。

 

用文字比较难说明

代码案例理解

 

[php]  view plain  copy
 
  1. <?php  
  2.   
  3.     class A3 {  
  4.         public $foo = 'empty';  
  5.     }  
  6.       
  7.     class B3 {  
  8.         public $foo = 'empty';  
  9.         public $bar = 'hello';  
  10.     }  
  11.       
  12.     function normalAssignment($obj) { //对象用作普通参数  
  13.         $obj->foo = 'changed';  
  14.         $obj = new B3; //这里说明对象是普通的地址传值  
  15.     }  
  16.       
  17.     function referenceAssignment(&$obj) {//对象用&传值  
  18.         $obj->foo = 'changed';  
  19.         $obj = new B3; //这里体现了区别 &引用的别名  
  20.     }  
  21.       
  22.       
  23.     $a = new A3;  
  24.     normalAssignment($a);  
  25.     echo get_class($a), "\n";//输出A3  
  26.     echo "foo = {$a->foo}\n";//输出foo = changed   
  27.       
  28.     referenceAssignment($a);  
  29.     echo get_class($a), "\n";//输出B3  关键理解这里为什么  
  30.     echo "foo = {$a->foo}\n";//foo = empty   
  31.     echo "bar = {$a->bar}\n";//bar = hello   
  32.   
  33. ?>  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM