2014-05-17 66 views
-1

爲什麼下面的代碼打印Fivephp一行if語句中字符串奇怪行爲

$a = 6; 
$b = 'Hey, The Value of $a Is '. 
    ($a == 1)?'One':''. 
    ($a == 5)?'Five':''. 
    ', Period.'; 
echo $b; 

爲什麼只有Five

+0

因爲$ a = 5?你在期待什麼? – bestprogrammerintheworld

+0

@bestprogrammerintheheworld:他正在變得只是'Five'而不是'嘿,$ a的價值是五,Period.',這是我想的問題。 – potashin

+0

@Notulysses - 好的,這也是我的猜測,但我不喜歡猜測遊戲:-)如果是這樣的話,那麼你的答案是很好的:-) – bestprogrammerintheworld

回答

1

因爲你應該使用()每個速記if語句

$a = 5; 
$b = 'Hey, The Value of $a Is '. 
(($a == 1) ? 'One' : '') . (($a == 5) ? 'Five' : '') . 
', Period.'; 
echo $b; 

它正在發生的事情,是因爲$ b爲先分配給'Hey, The Value of $a Is ',然後到One(速記如果語法不有效),之後它被分配到Five(同樣,因爲它保持第一個),並且(再次)語法無效,所以該值不與',Period.'連接。總之,這個字符串只是三個任務的順序,第三個是Five,然後它被打印在瀏覽器中。

Example

+0

是的,我剛剛發現,但很好奇,爲什麼只有'Five'? – Webinan

0

所以我們採取的代碼,使之1號線

$ B = '嘿,$ a的值A'($ A == 1)? '一' :''。($ a == 5)?'Five':''。',Period。';'

去除冗餘。

$ B = '嘿,爲$ A值'($ A == 1) '一':?($ A == 5) '十二五': '的時期。';

所以$ A = 5裝置執行以粗體顯示的部分:

($ A == 5)? 'Five':',期間'。

現在由於$ a = 5只顯示部分再次執行,因此我們只得到'Five'。

+0

所以請參閱https://eval.in/152610'$ a == 6'並再次選擇'Five'! – Webinan

+0

因爲得到的評價是「'嘿,$ a的價值是'。($ a == 1)」而不是「($ a == 1)」。答案中沒有說清楚。因此,在評估第一個三元組後,您只剩下「($ a == 5)?'五':',期間'。」 –