2013-06-23 47 views
1

我想堆三元表達式這個劇本,但我不斷收到意想不到的「)」堆疊三元表達式

這裏是我的腳本

$uri = 9; 
$build_status = 20; 

/** 
Using Ifs 
*/ 
if($uri == 20) 
{ 
echo 'ci=>passing'; 
} 
if($uri < 20 && $uri > 10 && $uri != $build_status) 
{ 
echo "ci=>almost failing"; 
} 
if($uri < 20 && $uri > 18 && $uri != $build_status) 
{ 
echo "ci=>test your code!"; 
} 
elseif($uri < 5) 
{ 
echo "ci=>failed."; 
} 

/** 
Stacking 
*/ 
echo (($uri==20 ? 'ci=>passing') ? ($uri < 20 && $uri > 10 && $uri != $build_status) : 'ci=>almost failing') ; 

我在哪裏去了?

+0

'我要去哪裏錯了嗎?'替換可讀的,如果有一個襯塊是的想法錯誤。 –

+0

>我哪裏錯了?這:永遠,永遠不會堆疊三元表達。 「總是編寫代碼,好像那個最終維護你的代碼的人將成爲一個知道你住在哪裏的暴力精神病患者。」 ([源(http://stackoverflow.com/questions/876089/who-wrote-this-programing-saying-always-code-as-if-the-guy-who-ends-up-maintai))。還有一個語法錯誤。 –

回答

2
echo ($uri==20 ? 'ci=>passing' : 
    ($uri < 20 && $uri > 10 && $uri != $build_status ? 'ci=>almost failing' : 
    ($uri < 20 && $uri > 18 && $uri != $build_status ? 'ci=>test your code!' : 
    ($uri < 5 ? 'ci=>failed.' : "[doesn't match previous conditions]" 
)))); 

在大多數語言中括號是可選的,但是PHP需要他們作爲三元運算符是左關聯 http://www.phpsadness.com/sad/30

2

($uri==20 ? 'ci=>passing')是語法錯誤。你需要在內部的:

對堆疊三元表達式的註釋+1。這與PHP更相關,因爲解析器在嵌套三元表達式方面遭到了可怕的破壞。

+0

有一篇關於如何破壞三元'''''-operator在PHP中的有趣閱讀:http://stackoverflow.com/questions/13142538/strange-behaviour-ternary-operator – mzedeler