我有這樣的事情在我的意見意外的變量T_ECHO如果
<li <?php $isCurrent ? echo 'class="current"' : ''?> >
<a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>
這將導致一個語法錯誤,意想不到的T_ECHO之一。更改echo
爲print
解決了這個問題,但我想了解爲什麼我不能使用echo
。
我有這樣的事情在我的意見意外的變量T_ECHO如果
<li <?php $isCurrent ? echo 'class="current"' : ''?> >
<a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>
這將導致一個語法錯誤,意想不到的T_ECHO之一。更改echo
爲print
解決了這個問題,但我想了解爲什麼我不能使用echo
。
你不能這樣使用這個構造。 ternary operator不是「if」塊,但會根據條件是否滿足返回值。
你要改變結構:
<?php echo ($isCurrent ? 'class="current"' : '') ?>
它與print()
,因爲這是一個返回值的函數。但不是你想要的,因爲第一個echo
將打印出print
的結果,這是沒有意義的。
它不適用於echo
,因爲echo不是函數,而是語言結構。
變化
<?php $isCurrent ? echo 'class="current"' : ''?>
到
<?php echo $isCurrent ? 'class="current"' : ''?>
我覺得這個小修補程序將解決你的問題:
<li <?php echo ($isCurrent ? 'class="current"' : '')?> >
<a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>
-1使用簡短的開幕標籤 - 一個非常糟糕的想法,並且大量限制了代碼的可移植性,因爲(默認情況下)它們被禁用。 – 2010-03-25 15:16:03
我不知道默認情況下禁用了簡短的開啓標記,我編輯了我的答案,以便代碼可以與常規的php-tags – murze 2010-03-25 15:18:57
Wicked一起工作。除非您再次編輯您的答案,否則我無法取消我的downvote – 2010-03-26 10:35:27
這是更容易閱讀和處理恕我直言
<?php printf('<li%s><a href="%s" class="%s">%s</a></li>',
$isCurrent ? ' class="current"' : '',
$someLink, $someClass, $someText);
回聲()實際上不是一個函數(它 是一個語言結構),所以你不 與 使用括號它要求。 echo()(與其他語言的 結構不同)不會像 函數那樣工作,因此在函數的上下文中不總是使用 。 此外,如果您想要將多個參數 傳遞給echo(),則不得將 參數括在 括號內。
這不是正常工作:
<?php $isCurrent ? print('class="current"') : ''?>
不管怎麼說,這是壞的編碼。更好的是
<?php echo $isCurrent ? 'class="current"' : ''?>
我會完全放棄三元運算符和空字符串印刷和書寫:
<?php
$isCurrent and print 'class="current"';
?>
'echo'是一個語言結構,並不需要括號 – Gordon 2010-03-25 15:18:24