2013-06-28 24 views
1

很確定有一個簡單的答案,但很難搜索,因爲使用了模糊的術語。PHP在速記中的真實子句中的多個動作如果

我使用速記if語句,並且當它返回true時想做多個動作,語法是什麼樣的?

例如,邏輯思維我想是這樣的:

<?php 

$var = "whatever"; 

(isset($var) ? $var2=$var; $var3=$var : $error="fubar"); 

?> 

顯然,這將停止與意外;但希望你瞭解我想要完成的事情。

非常抱歉,如果這是一個重複的問題,我發誓我搜索它。 :)

謝謝!

編輯

我明白,無論是否速記是適合這種情況應該受到質疑。但是,仍然可以這樣做,是一個問題。

+0

我不認爲這是可能的。 (...){...} else {...} – chrislondon

+0

'$ var1 = $ var2 = $ var3 =(isset($ var)?$ var:$ error ='foobar ');' – Twisted1919

+1

當你開始將三元組合在一起時,你的代碼只是提交了一個不可讀的WTF。 – TravisO

回答

6

是的,它可以通過每個任務之間使用&&

(isset($var) ? ($var2=$var) && ($var3=$var) : $error="fubar"); 

在上面的代碼,如果$var設置,$var2$var3將得到相同的值,否則兩個變量將不會改變。

這就是說,這不是最合適的方法。三元運算符應該用於簡單邏輯,當邏輯開始變得複雜時,三元運算很可能不再是最好的選擇。相反,你應該只使用一個簡單的if/else。

+0

哦,這很聰明:D – Halcyon

+0

在這種特殊情況下,你甚至可以這樣做:'isset($ var)? $ var2 = $ var3 = $ var:$ error ='foobar';' – chrislondon

+1

哼......如果$ var == false,&&操作符的第二部分將不會執行,對不對?否則,它的作品,但它傷害了我的眼睛x_x。 – Aralicia

0

據我所知,這是不可能的,應該是不可能的。 (?:)不是,也不應該被視爲if,因爲它不以同樣的方式工作,也不是爲它設計的。

三元運算符的存在方式是根據條件返回一個值,而不是「快速」。

如果你使用它而不需要返回值,那麼你可能會錯誤地使用它。

在這個特定的情況下,你應該使用和if-else語句。這也有助於使您的代碼更具可讀性。

+0

我明白你的觀點,只是稍微有些沮喪,它必須是'那'簡單。但我認爲簡單和複雜之間的界線必須繪製在某個地方...... – Joe

+0

事情是三態已被創建爲if-else的特定情況:if(condition){value = X;} else {value = Y }。您可以嘗試用於其他事情,但請記住,它基本上重現了此行爲,因此僅限於相同類型的操作。 – Aralicia

+0

-1:有可能。 –

0

對於這個特定的情況下,你可以這樣做:

在這種特定的情況下,你可以使用這個:

$output = (isset($var)) ? $var2 = $var3 = $var : false; 

稍好這個特定的測試實例選項:

$error = (isset($var)) ? !(bool)($var2 = $var3 = $var) : true; 

這將設置$errortrue如果未設置,如果設置了$var,則設置爲false,因此您可以使用if($error)塊進行跟蹤。

然而,三元可能不是接近最好的辦法...

對於更復雜的情況下,你需要使用閉包,或者更糟的是,預先聲明功能:

$output = (isset($var)) ? setVars($var) : false; 

function setVars($var) { 
    $var2 = $var3 = $var; 
} 

在這一點上,你可能更好用ifswitch聲明。