2011-09-21 45 views
0

我有一個看起來像這樣的功能:PHP:在三元表達多條語句

function fun() 
{ 
    $pMana < 20 ? error(1) : $pMana -= 20; 
    //do stuff 
} 

我希望在誤差函數被調用,它也可以退出功能,像這樣

function fun() 
{ 
    $pMana < 20 ? (error(1); return) : $pMana -= 20; //invalid syntax 
    //do stuff 
} 

我還沒有看到能夠處理多個這樣的陳述的三元表達式,但我是新來的。可能嗎?

+0

它是無效IDEA堆棧ternarys –

回答

3

在這種情況下使用if聲明。

三元運算符應該返回單個值,因此是單個語句限制。你也不應該在三元運算符中使用任何有重大副作用的函數。

你提出的建議不可避免地會導致代碼非常不可讀,你應該關注可讀性而不是行數/字符數。大部分代碼被多次讀取,即被寫入/編輯。

編輯:

您還可以使用assert於類似的目的。

assert($pMana > 20); 
$pMana -= 20 

然而,斷言不應該用於處理常見情況(如用戶輸入驗證)。經驗法則是失敗的斷言總是應該在你的代碼中指出一個錯誤。斷言表達式應該包含關於程序/程序狀態的其他部分以「儘快捕獲錯誤」爲座右銘的假設(在這種情況下,它將用於防止錯誤導致法力變爲負值,可能導致錯誤稍後的)。

+0

'assert'不是'if',用於代碼的調試版本(僅限?)。 – hakre

+0

這很有意思,爲什麼要聲明只是爲了調試? – dukevin

+0

@dukevin因爲它不是真正透明的(特別是在處理斷言時)。這只是一個sugeston(OP的帖子建議代碼在那裏處理錯誤情況)。 –

0

三元運算符通常用於爲變量賦值。 邏輯語句應與「if」一起使用。