2014-03-19 106 views
0

結果變量的分配的是differrent從函數返回:爲什麼賦值和返回的結果不同?

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 
+0

我的假設是,在函數返回中計算布爾表達式的所有部分,並且在沒有圓括號的分配部分中只分配第一個「!」。 – Eugene

回答

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,那麼結果將是相同

第一個是等於。

相關問題