PHP底层-引用数组
代码举例分析1:
$arr = array(11,22,33);
$tmp = $arr;
php中定义数组,结构如下,zvalue对应的是指针值,该指针指向一个hashtable,hashtable中第一位是可以理解成数组key,第二位是内存地址,指向一个普通变量的zvalue结构;type对应的是is_array,refcount_gc=1,is_ref_gc=0;当将
流程如下图:
代码举例分析2:
$arr = array(11,22,33);
$tmp = $arr;
$arr[1] = 99;
echo $tmp[1];
赋值99的时候,会发生分裂。
流程如下图:
特殊的怪现象:
/** 例子1 */
$arr = array(11,22,33);
$x= &$arr;
$tmp = $arr;
$arr[1] = 99;
echo $tmp[1]; // 11
/** 例子2 */
$arr = array(11,22,33);
$x= &$arr[1];
$tmp = $arr;
$arr[1] = 99;
echo $tmp[1]; // 99
可以理解为
引用时的怪现象
$arr = array(11,22,33);
foreach($arr as $v) {
}
var_dump(current($v)); // 最后数组指针停留在数组结尾,取不到值,false
foreach的时候,想当于copy一个
$arr = array(11,22,33);
foreach($arr as $k=>$v) {
$arr[$k] = $v;
}
var_dump(current($arr)); // 22
上面情况当,重新赋值
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: php判断变量是否是整数的两种方法
- 下一篇: 破解极验(geetest)验证码