赋值运算符两边函数的执行顺序

问题描述 投票:0回答:1

我想实现一个功能

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

我凭直觉写了这段代码,但是今天review这段代码的时候,我在想这会不会是一个bug。

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

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

因为

next()
优先于
current()
,但是这个函数在PHP8中运行良好。

这是为什么?赋值不是从右到左吗?

php operator-precedence php-8 order-of-execution
1个回答
2
投票

对于

=
您的情况,关联性是从左到右。您可以使用下面的代码片段进行交叉检查,其中先打印
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
并且重复相同的操作直到数组完全循环。

© www.soinside.com 2019 - 2024. All rights reserved.