2011-06-22 104 views
11

我有一個字符串,我想附加一些其他的字符串。讓我們說:PHP如果速記

$my_string = 'Hello'; 

$my_string .= ' there'; 

這將返回'你好'。

我想使這個條件是這樣的:

$my_string = 'Hello'; 

$append = 'do'; 

if ($append == 'do') { 

    $my_string .= ' there'; 

} 

現在,我想用一個三元操作要做到這一點,但我所有的例子碰到是的if/else至極將會像:

$my_string .= ($append == 'do') ? ' there' : ''; 

所以有可能做到只有IF和沒有別的?

謝謝。

+4

難道你不能只是連接一個空白字符串? – Claudiu

+1

可以使用一個不太複雜的表達式,例如不使用三元運算符,而只是一個邏輯運算符? – hakre

+0

嘗試 if(condition)return true; –

回答

17

不...三元意味着你所需要的條件,真正的部分,假部分

22

都能跟得上三個部分。但是,相反是可能的。下面是PHP文檔的一段引文:

從PHP 5.3開始,可以忽略三元運算符的中間部分。表達式expr1?:如果expr1的計算結果爲TRUE,則expr3返回expr1,否則返回expr3。

http://php.net/manual/en/language.operators.comparison.php

4

你可以這樣做:

($append == 'do') ? $my_string .= ' there' : $noop ; 

如果反轉語句,使三元在外面,而不是分配的裏面,那麼你可以把整個聲明部分,然後在ELSE部分做一些無操作的命令。

11

結合mellamokb和並且Z你可以這樣做:

($append != 'do') ?: $my_string .= ' there'; 
+2

+1會說,但無法正確地測試它ideone :(它似乎越來越邊界不可讀,我不會推薦它。 – mellamokb

+0

這是沒用的,它是錯誤的運算符。使用'或'或「||」,但不是「?」 – hakre

1

您可以創建一個函數,你想要做什麼。而不是每次寫出if聲明。

function doAppend($doIt, &$value, $appendValue) 
{ 
    if($doIt) $value .= $appendValue; 
} 

與調用它:

doAppend($append == 'do', $my_string, ' there'); 

注意第二個參數是如何通過引用,所以它會調用代碼被改變了。

4

的另一種方法來檢查條件,然後添加到字符串將是:

($append == 'do') and ($my_string .= ' there'); 

但是,這真的只是一個if位移即可。但接近「沒有其他人的三元」。

+0

不需要括號 – hakre

+0

@hakre:原本沒有,但我注意到這通常更好理解的解釋 – mario

+0

是的,當我偶然發現它時,它可以讓事情變得更容易閱讀,確實如同可以丟棄的空白一樣,但沒有人會這樣做,至少不是全部。 – hakre

3

如果你正在考慮縮短代碼,你可以在同一行寫同樣的東西。

if ($append == 'do') {$my_string .= ' there';} 

編輯

我剛剛發現這一點,以爲派上用場。你也可以寫if塊這樣

if ($append == 'do') $my_string .= ' there'; 
0

不用else /假一部分不能使用三元,但如果你的目的是爲了有一個樣樣在行,我可以建議嘗試這種另類:

($append == 'do' && $my_string .= ' there'); 

如果第一個是真的,它將繼續進行第二個陳述。否則只會在第一次評估結果爲假時停止。

參考懶惰評估(所謂的Short-circuit evaluation

或者你也可以做相反,離開真正如果部設置爲空,並宣佈只是假的,因爲並且Z正確地指向。