使用++ a作为回报,为什么会发生这种情况?

时间:2017-03-20 15:27:45

标签: php static operators

最近我按照官方示例对返回参考函数进行了测试  here,但与返回'++ $ a'时的结果相混淆,似乎它们应该与答案相同What's the difference between ++$i and $i++ in PHP?它似乎与PHP的版本有关。

php版

PHP 5.6.28 (cli) (built: Dec  6 2016 12:38:54)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

function &fun(){
        static $var = 1;
        return ++$var;
}

function &bar() {
    static $var = 1;
    ++$var;
    return $var;
}

$var2 =& fun();
$var3 =& bar();
fun();
bar();

echo 'var2:', $var2; // 2  why is it 2 instead of 3?
echo 'var3:', $var3; // 3

2 个答案:

答案 0 :(得分:0)

您正在使用reference到同一个变量。因此,当您运行bar()时,$var已经是2。

答案 1 :(得分:-1)

function &fun(){
        static $var = 1;
        return ++$var;
}

这个函数没什么意义,因为它的return表达式包含一个值作为操作数。在评估一元前缀运算符++之后返回该值。

因此,++$var递增变量,然后返回变量的值,而不是对变量本身的引用。

简而言之:只能为变量获取引用,从值中引用并没有多大意义。