由list()删除的PHP引用

时间:2018-04-11 00:30:29

标签: php variables reference php-7

我目前在Debian中使用PHP 7(PHP版本7.0.27-0 + deb9u1)并遇到以下问题:

list()似乎剥夺了引用。但我知道过去的某一天它没有(可能在PHP 5.3或5.4附近)。

最小(非)工作示例:

$a=array('A');

$arr=array();
$arr[]=&$a;

var_dump($arr);

$arr[0]['X']='X';
list($entry)=$arr;
$entry['Z']='Z';

var_dump($arr);

预期输出:

/tmp/php_eval_ifEHDF:6:
array (size=1)
  0 => 
    array (size=1)
      0 => string 'A' (length=1)

/tmp/php_eval_ifEHDF:13:
array (size=1)
  0 => 
    array (size=3)
      0 => string 'A' (length=1)
      'X' => string 'X' (length=1)
      'Z' => string 'Z' (length=1)

实际输出:

/tmp/php_eval_rdQjSm:6:
array (size=1)
  0 => 
    array (size=1)
      0 => string 'A' (length=1)

/tmp/php_eval_rdQjSm:12:
array (size=1)
  0 => 
    array (size=2)
      0 => string 'A' (length=1)
      'X' => string 'X' (length=1)

这是错误还是预期的行为?

现在我使用这样的东西来获得相同的结果(我希望像list()这样的单行,但它对我来说看起来很难看:

//minimal version (parenthesis unneeded here)
$entry=&($arr)[0];
//really used version
$entry=&(some_function_returning_arr())[0];

但上述解决方法无法完成以下任务:

list($x, $y)=array(&a, &b);
//when changing $x, $a won't be changed as well :-(

0 个答案:

没有答案