分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

php地址符&

发布时间:2023-09-06 01:20责任编辑:苏小强关键词:暂无标签

 今天遇到一个很奇怪的问题

$arr=[‘a‘,‘b‘,‘c‘];foreach($arr as &$v){}foreach($arr as $v){}var_dump($arr);unset($v);var_dump($arr);

这段代码相信咋一看都会以为输出的是abc

可是结果是:

array (size=3)  0 => string ‘a‘ (length=1)  1 => string ‘b‘ (length=1)  2 => &string ‘b‘ (length=1)array (size=3)  0 => string ‘a‘ (length=1)  1 => string ‘b‘ (length=1)  2 => string ‘b‘ (length=1)  重点在于

2 => &string ‘b‘ (length=1) 这个地方相当于给$v赋值为$arr[2]

原因在于&php的地址符

先来了解一下&的基本用法:

$b = $c = 1;$a = &$b;$a = 2;echo "b=$b,c=$c\n";$a = &$c;$a = 100;$a = 200;echo "b=$b,c=$c\n";unset($a);$a = 500;echo "b=$b,c=$c\n";上面$a指定成$b的引用之后,除非再次指定成其他引用,或者unset($a),否则改变$a就是改变对应的$b的值。

对于你这个foreach,也是同样的道理,你把循环单步拆开,就是这个样子:

$v = &$arr[0];$v  = &$arr[1];$v  =  &$arr[2];

循环运行到最后的时候,$v是$arr[2]的引用,所以就相当于这么个形式:

$arr[0] = a;$arr[1] = b;$v = &$arr[2];$arr[2] = b;var_dump($arr);

也就不难理解为什么var_dump会在最后的键值对上打印出一个&的符号了吧。

php地址符&

原文地址:http://www.cnblogs.com/foolzhou/p/7735468.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved