Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组引用的奇怪行为_Php - Fatal编程技术网

Php 数组引用的奇怪行为

Php 数组引用的奇怪行为,php,Php,输出: 2 2 二, $arr的元素在$arr2的增量元素之后更改,尽管assign是按值传递而不是按引用传递。这在定义$a到$arr[0]的引用之后发生。那个么为什么这个定义修改了源数组并插入对值的引用而不是初始值呢?对于C++来说,它对我来说似乎不合逻辑。是Bug还是文档化的特性?我在PHP5.5手册中找到了这一点,但并没有找到解释,在手册中,这是可以发生的事实。 但是,请注意,数组中的引用具有潜在危险。使用右侧的引用执行普通(非引用)赋值不会将左侧变为引用,但数组中的引用会保留在这些普通赋

输出:
2
2
二,

$arr的元素在$arr2的增量元素之后更改,尽管assign是按值传递而不是按引用传递。这在定义$a到$arr[0]的引用之后发生。那个么为什么这个定义修改了源数组并插入对值的引用而不是初始值呢?对于C++来说,它对我来说似乎不合逻辑。是Bug还是文档化的特性?我在PHP5.5手册中找到了这一点,但并没有找到解释,在手册中,这是可以发生的事实。

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


听起来像是php开发人员的借口,然后发明了它的用法。但并非所有人都会期待这种行为。这是另一种射自己脚的方式。我认为这个问题的真正根源是:我们已经讨论过这个问题,要正确地解决这个问题,php的性能将大大降低。因此,将记录此行为。“我完全同意你的看法,”拉托贾库夫说。这肯定是出乎意料的,但您已经询问过它是一个bug还是有文档记录的。看看你的链接,它一开始是一个bug(现在仍然是),但我的引用来自文档。你想知道他们是否在5.5中解决了这个问题吗?我认为他们有比这个更大的问题)。
<?php
 $arr = array(1);
 $a =& $arr[0];
 $arr2 = $arr;
 $arr2[0]++;

 var_dump($arr);
 var_dump($a);
 var_dump($arr2);
?>
<?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! */
?>