2012-08-15 56 views
3

我是PHP新手,想要學習東西。php中的三元運算符的用法

可以避免使用臨時變量嗎?

<?php 

    function get_name() 
    { 
     // assume that this function return 3 
     // values on different conditions "name0" "name1" or "name2"; 
    } 

    $result = (get_name() == "name0" || get_name() == "name1") ? "Primary" : "Secondary" ; 
    echo $result; 

?> 

在上面我打電話get_name()函數兩次,這意味着兩個調用相同的函數。

只用一次調用就可以達到同樣的效果,但不會將其保存到臨時變量中嗎?

什麼是常用的做法?

更新:我編輯的問題是更具體的。幾乎所有的答案都令人滿意,希望此更新將有助於新讀者。

+4

['$結果= in_array返回混合的結果(的get_value(),數組(0,NULL),真)? '零':'一';'](http://us.php.net/in_array)。雖然「不將它保存到臨時變量」的要求是不尋常的 - 它們沒有任何問題...... – DCoder 2012-08-15 15:19:36

+2

在我看來,使用具有有意義名稱的臨時變量可以使代碼更具可讀性。 – martinstoeckli 2012-08-15 15:34:40

回答

10

我會做到這一點:

$result = in_array(get_value(), array(0, NULL), true) ? "Zero" : "One" ; 

文檔:in_array

+0

你可以請解釋一點點? – Red 2012-08-15 15:25:36

+1

什麼不清楚?這將調用函數['in_array($ needle,$ haystack,$ strict = false)'](http://us.php.net/in_array),它檢查'$ needle'是否在第二個參數'$乾草堆,使用嚴格或寬鬆的比較。根據您的實際使用情況和返回值,您可能需要使用嚴格的比較選項。 – DCoder 2012-08-15 15:28:51

+1

'$ strict'需要設置爲'true',否則返回值'false'或''0''會導致'in_array()'返回'true'。 – nickb 2012-08-15 15:32:24

7

這個怎麼樣?

$result = get_value() ? "One" : "Zero"; 

這導致get_value()被類型化爲布爾值。 null0變成false,並且1變成true

+0

我很抱歉,但那只是一個例子。可能是我提出了錯誤,該函數返回不同的條件下的不同值。 – Red 2012-08-15 15:25:06

+0

啊,太糟糕了。然後我會推薦Jocelyn的'in_array'解決方案。 – awm 2012-08-15 15:26:43

+0

這看起來非常漂亮,但如果其他人必須閱讀此代碼(您需要了解'get_value()'以瞭解它)的額外知識,它也會導致誤解。 – martinstoeckli 2012-08-15 15:26:46

0

嘗試

<? echo (get_value())?"One":"Zero";?> 
+0

我很抱歉,但那只是一個例子。可能是我提出了錯誤,該函數返回不同的條件下的不同值。 – Red 2012-08-15 15:26:29

1

的函數被調用兩次,因爲===運營商使用,並且它只會輸出零如果返回值正好是0null,但不是如果它是假或空字符串。

的常用方法是

$result = (get_value()) ? "Zero" : "One" ; 

將輸出零false和空字符串爲好。

如果您需要嚴格的檢查,並假設的get_value()是一種昂貴的功能,你可以這樣做:

$result = (in_array(get_value(), array(0, null), true) ? "Zero" : "One" ; 

有2個再次函數調用,但一個是到in_array功能。

如果您只將結果保存在臨時變量中,它會更具可讀性。

更妙的是,不從的get_value()函數

+0

我很抱歉,但那只是一個例子。可能是我提出了錯誤,該函數返回不同的條件下的不同值。 – Red 2012-08-15 15:27:37