2012-09-10 31 views
1

我可以在PHP中執行此操作嗎?設置並驗證IF中的返回值PHP

if ($Var = $this->test1() == true) { 
    var_dump($Var); 
} 

public function test1() { 
    return true; 
} 

它是真實的,但我不確定這是否是檢查此類返回值的正確方法。

回答

2

你可以,但有兩件事情你應該知道的:當你做這樣的事情

if ($Var = $this->test1() == true) { 

的運營商混淆:

  • 做你想做的事$這個 - > test1的()==真,結果存儲到$ VAR你想要做的是$ var = $這個 - > test1的(),它與真正的
比較
  • 在你的情況下,$ this-> test1()返回true,所以沒關係。但是,如果我們改變你的代碼位:

    if ($Var = $this->test1() == 5) { 
        var_dump($Var); 
    } 
    
    public function test1() { 
        return 3; 
    } 
    

    有人誰讀,如果你想存儲$這個 - 你的代碼將不明白> test1的()在$ VAR(因此,使VAR 3),或者如果您想要在$ Var(false)中放置比較結果$ this-> test1 == 5。

    最後在$ Var中保留的內容在PHP 5.3 Certification處可能是一個非常好的問題,但不是有用的情況。

    爲了避免出錯,使用括號:

    if (($var = $this->test1()) == true) { 
    

    你應該照顧的類型

    我給你的東西可以返回一些強制轉換爲真實的例子:

    function test1() { return true; } 
    function test2() { return 3; } 
    function test3() { return 3.42; } 
    function test4() { return "x"; } 
    function test5() { return array('x'); } // array() == true returns false 
    function test6() { return new stdClass(); } 
    
    echo test1() == true; 
    echo test2() == true; 
    echo test3() == true; 
    echo test4() == true; 
    echo test5() == true; 
    echo test6() == true; 
    
    // outputs 111111 (1 = true) 
    

    爲避免錯誤,您應該使用=== operator。你的最後一段代碼變爲:

    if (($var = $this->test1()) === true) { 
    
  • 3

    可以,但是寫:

    if (($var = $this->test1()) === true) { 
        var_dump($var); 
    } 
    

    是安全的,有一些事情要提醒讀者。

    我不會建議你這樣做,但在某些情況下,這是可以接受的;如需要惰性執行的複雜if-else樹。

    if (($result = slow_process()) !== false) { 
        return $result; 
    } else if (($result = slow_process1()) !== false) { 
        return $result; 
    } else if (($result = slow_process2()) !== false) { 
        return $result; 
    } else if (($result = slow_process3()) !== false) { 
        return $result; 
    } 
    

    這是過分簡化,但這些情況確實發生。

    +0

    我的函數返回一個字符串或布爾值false,'!== false'是最好的方法嗎? –

    +0

    我不知道這是否是最好的方法,但我不反對。 – Halcyon

    1

    == true部分是不必要的。你有什麼是有效的語法,但有些發現它令人困惑。您始終可以這樣做:

    $Var = $this->test1(); 
    if ($Var) { ... 
    

    只需與開發團隊一起決定標準。

    +0

    我想做一行,因爲我構建了一個相當複雜的if-else代碼。 –

    1

    你也可以這樣做:

    if ($Var = $this->test1()) { 
        var_dump($Var); 
    } 
    
    public function test1() { 
        return true; 
    }