免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2100 | 回复: 0
打印 上一主题 下一主题

PHP4和PHP5中的引用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-27 10:32 |只看该作者 |倒序浏览
PHP4和PHP5中的引用






文章转载自重庆PHP,原文地址:http://www.php-chongqing.com/index.php/article/104
PHP提供了引用操作符(&),在PHP中引用的意思是用不同的名字访问同一个变量内容,PHP4和PHP5中的对象引用是有区别的。

Php代码
  1. 1.$a = 8;   
  2. 2.$b = $a;   
  3. 3.echo '$a:' . $a;    // 8   
  4. 4.echo '$b:' . $b;    // 8   
  5. 5.$a = 12;   
  6. 6.echo '$a:' . $a;    // 12   
  7. 7.echo '$b:' . $b;    // 8   
  8. $a = 8;
  9. $b = $a;
  10. echo '$a:' . $a;         // 8
  11. echo '$b:' . $b;        // 8
  12. $a = 12;
  13. echo '$a:' . $a;         // 12
  14. echo '$b:' . $b;        // 8
复制代码
首先创建变量$a,把整数8赋值给$a,然后把$a赋给$b,这时候PHP创建一个$a的副本,再把这个副本赋给$b,通俗点说就是内存中产生了两个变量,变量的值都是8,这两个变量一个指向$a,一个指向$b,所以打印结果$a和$b都是12,接着我们将12赋给$a,然后再打印$a和$b,可以看到$a的值变成12了,而$b的值还是8,这个很容易理解,因为$a和$b是两个完全不相干的变量。



Php代码
  1. 1.$a = 8;   
  2. 2.$b &= $a;   
  3. 3.echo '$a:' . $a;    // 8   
  4. 4.echo '$b:' . $b;    // 8   
  5. 5.$a = 12;   
  6. 6.echo '$a:' . $a;    // 12   
  7. 7.echo '$b:' . $b;    // 12  
  8. $a = 8;
  9. $b &= $a;
  10. echo '$a:' . $a;         // 8
  11. echo '$b:' . $b;        // 8
  12. $a = 12;
  13. echo '$a:' . $a;         // 12
  14. echo '$b:' . $b;        // 12
复制代码
首先创建变量$a,把整数8赋值给$a,然后把$a赋给$b,注意是使用的&引用赋值,打印$a和$b,两个变量的均为8;接着我们把12赋给$a,再打印$a和$b,可以看到$b的值也变成12了。PHP的引用操作符(&),可以不让程序产生一个副本,$a和$b指向同一块内存区域,即$a和$b是同一个变量,所以当$a的值发生变化时,$b的值也会跟着发生变化。这就好比‘张三’,上学的时候同学们给取个绰号‘三娃’,无论是‘张三’还是‘三娃’所指的都是那一百多斤,都是指的同一个人。

在PHP4中,当你创建对象并将其赋值给其它变量时,PHP4总是会产生一个该对象的副本,将整个对象及所有内容复制过去。PHP4的这种对象处理方式非常的糟糕,复制对象会让程序占用更多的内存,复制对象往往还会引起一些莫名其妙的错误。这种糟糕的对象处理方式在PHP5中得到了改善,在PHP5中对象总是以引用的方式传递。

Php代码
  1. 1.$user = new User();   
  2. 2.$user->name = 'zhangsan';   
  3. 3.$bing = $user;   
  4. 4.$bing->name = 'bing.peng';   
  5. 5.echo $user->name;    // For PHP4: zhangsan   For PHP5: bing.peng  
  6. $user = new User();
  7. $user->name = 'zhangsan';
  8. $bing = $user;
  9. $bing->name = 'bing.peng';
  10. echo $user->name;         // For PHP4: zhangsan        For PHP5: bing.peng
复制代码
在PHP4下运行上面的代码,打印出来的是:‘zhangsan’;在PHP5下打印结果为:‘bing.peng’,可以看到PHP5默认就是使用引用赋值,注意PHP5只是对象类型默认使用引用赋值,基本类型还是会产生副本,那么要在PHP5中复制对象,需要使用clone关键字来完成,如果想要在PHP4中得到同样的效果,我们就需要使用引用操作符,代码如下:

Php代码
  1. 1.$user = new User();   
  2. 2.$user->name = 'zhangsan';   
  3. 3.$bing &= $user;   
  4. 4.$bing->name = 'bing.peng';   
  5. 5.echo $user->name;   
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP