为什么分配和返回的结果不同?

时间:2014-03-19 09:29:51

标签: php

变量赋值的结果与函数的返回不同:

function test() {
return !true
    or !true
    or !count(4)
    or (
        new stdClass() and true
    );
}

$result = !true
        or !true
        or !count(4)
        or (
            new stdClass() and true
        );

echo (int)$result . PHP_EOL; // 0

echo (int)test() . PHP_EOL; // 1

1 个答案:

答案 0 :(得分:1)

这是由于 Operator Precedence

作业操作的优先级高于and / or

第一个等于:

function test() {
return (!true
    or !true
    or !count(4)
    or (
        new stdClass() and true
    ));
}

而第二个等于:

($result = !true)
        or !true
        or !count(4)
        or (
            new stdClass() and true
        );

使用&& / ||代替and / or,结果将是相同的。