2010-03-25 48 views
3

我有這樣的事情在我的意見意外的變量T_ECHO如果

<li <?php $isCurrent ? echo 'class="current"' : ''?> > 
    <a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a> 
</li> 

這將導致一個語法錯誤,意想不到的T_ECHO之一。更改echoprint解決了這個問題,但我想了解爲什麼我不能使用echo

回答

9

你不能這樣使用這個構造。 ternary operator不是「if」塊,但會根據條件是否滿足返回值。

你要改變結構:

<?php echo ($isCurrent ? 'class="current"' : '') ?> 

它與print(),因爲這是一個返回值的函數。但不是你想要的,因爲第一個echo將打印出print的結果,這是沒有意義的。

它不適用於echo,因爲echo不是函數,而是語言結構。

+0

'echo'是一個語言結構,並不需要括號 – Gordon 2010-03-25 15:18:24

2

變化

<?php $isCurrent ? echo 'class="current"' : ''?> 

<?php echo $isCurrent ? 'class="current"' : ''?> 
0

我覺得這個小修補程序將解決你的問題:

<li <?php echo ($isCurrent ? 'class="current"' : '')?> > 
    <a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a> 
</li> 
+0

-1使用簡短的開幕標籤 - 一個非常糟糕的想法,並且大量限制了代碼的可移植性,因爲(默認情況下)它們被禁用。 – 2010-03-25 15:16:03

+0

我不知道默認情況下禁用了簡短的開啓標記,我編輯了我的答案,以便代碼可以與常規的php-tags – murze 2010-03-25 15:18:57

+0

Wicked一起工作。除非您再次編輯您的答案,否則我無法取消我的downvote – 2010-03-26 10:35:27

0

這是更容易閱讀和處理恕我直言

<?php printf('<li%s><a href="%s" class="%s">%s</a></li>', 
       $isCurrent ? ' class="current"' : '', 
       $someLink, $someClass, $someText); 
1

documentation

回聲()實際上不是一個函數(它 是一個語言結構),所以你不 與 使用括號它要求。 echo()(與其他語言的 結構不同)不會像 函數那樣工作,因此在函數的上下文中不總是使用 。 此外,如果您想要將多個參數 傳遞給echo(),則不得將 參數括在 括號內。

這不是正常工作:

<?php $isCurrent ? print('class="current"') : ''?> 

不管怎麼說,這是壞的編碼。更好的是

<?php echo $isCurrent ? 'class="current"' : ''?> 
0

我會完全放棄三元運算符和空字符串印刷和書寫:

<?php 
$isCurrent and print 'class="current"'; 
?>