数组引用的奇怪行为

拉托贾夫
<?php
 $arr = array(1);
 $a =& $arr[0];
 $arr2 = $arr;
 $arr2[0]++;

 var_dump($arr);
 var_dump($a);
 var_dump($arr2);
?>

输出:
2
2
2

尽管赋值是按值传递而不是按引用传递,但在$ arr2的增量元素之后更改了$ arr的元素。这在将$ a定义为$ arr [0]后发生。那么,为什么此定义修改了源数组并插入对值的引用而不是初始值?在C ++之后,对我来说似乎不合逻辑。是Bug还是文档功能?我找到了此链接,但在php 5.5手册中找不到解释,在手册中只有这样的事实。

山姆

PHP:引用做什么

但是请注意,数组内部的引用具有潜在的危险使用右侧的引用执行普通(不是通过引用)分配不会将左侧变成引用,但是数组内部的引用将保留在这些普通分配中这也适用于按值传递数组的函数调用。例子:

<?php
/* Assignment of scalar variables */
$a = 1;
$b =& $a;
$c = $b;
$c = 7; //$c is not a reference; no change to $a or $b

/* Assignment of array variables */
$arr = array(1);
$a =& $arr[0]; //$a and $arr[0] are in the same reference set
$arr2 = $arr; //not an assignment-by-reference!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* The contents of $arr are changed even though it's not a reference! */
?>

换句话说,数组的引用行为是在逐个元素的基础上定义的;单个元素引用行为与数组容器的引用状态无关

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

奇怪的行为,通过引用分配未定义的变量

来自分类Dev

真的很奇怪的numpy数组浮点行为

来自分类Dev

通过引用循环在foreach中未设置的奇怪行为

来自分类Dev

数组的奇怪JavaScript变量行为

来自分类Dev

从数组删除,镜像(奇怪)行为

来自分类Dev

Perl中数组声明的奇怪行为

来自分类Dev

从page.evaluate返回的数组的奇怪行为

来自分类Dev

元组索引numpy数组的奇怪行为

来自分类Dev

引用未知范围数组的不同编译器的奇怪行为

来自分类Dev

数组元素分配的奇怪行为

来自分类Dev

NodeJS中的奇怪数组行为

来自分类Dev

Squeak Smalltalk数组中的奇怪行为

来自分类Dev

字符串数组的奇怪Javascript行为

来自分类Dev

关于长度的奇怪数组行为

来自分类Dev

C ++奇怪的数组行为

来自分类Dev

qsort()比较结构数组:非常奇怪的行为

来自分类Dev

Matlab数组的奇怪行为

来自分类Dev

取消引用char *时出现奇怪的数组/指针行为

来自分类Dev

C数组上的奇怪行为

来自分类Dev

PHP关联数组_搜索奇怪的行为

来自分类Dev

从数组删除,镜像(奇怪)行为

来自分类Dev

奇怪的可选元组数组行为

来自分类Dev

c + +多态性:segfault和引用数组的奇怪行为

来自分类Dev

数组列表中Contains()的奇怪行为

来自分类Dev

C ++中奇怪的引用行为

来自分类Dev

按类型过滤Swift数组的奇怪行为

来自分类Dev

Squeak Smalltalk数组中的奇怪行为

来自分类Dev

Java数组:奇怪的行为

来自分类Dev

数组 NodeJS/Cron 上 forEach 的奇怪行为