赋值操作符两侧函数的执行顺序



我想实现一个函数

$input = ['key1', 'value1', 'key2', 'value2'];
// $output = ['key1' => 'value1', 'key2' => 'value2'];
$output=[];
do {
$output[current($input)] = next($input);
} while (next($input));

我是凭直觉写这段代码的,但是当我今天回顾这段代码时,我想这可能是一个bug。

我假设输出应该是这样的:

['value1'=>'value1','value2'=>'value2']

因为next()优先于current(),但是这个函数在PHP8中工作得很好。

为什么会这样?作业不是从右到左吗?

对于您的案例,=的结合律是从左到右的。您可以与下面的代码片段进行交叉检查,其中首先打印t1而不是t2

<?php
$output=[];
$output[test('t1')] = test('t2');
function test($str){
echo $str,PHP_EOL;
return rand(10, 100);
}

因此,你的输出是[ 'key1' => 'value1','key2' => 'value2'],因为current()给出了key1,next()推进了内部数组指针并返回了元素值value1,并且重复了相同的操作,直到数组完全循环。

相关内容

  • 没有找到相关文章

最新更新