内联if中的意外标记T_ECHO

时间:2010-03-25 15:09:02

标签: php

我的一个观点中有类似的内容

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

这会导致语法错误,意外T_ECHO。更改echo print解决了这个问题,但我想了解为什么我不能使用echo

6 个答案:

答案 0 :(得分:9)

你不能以这种方式使用这种结构。 ternary operator不是“if”块,而是根据条件是否满足返回值。

您想要更改结构:

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

它与print()一起使用,因为这是一个带有返回值的函数。然而,这不是你想要的,因为第一个echo将打印出print的结果,这是没有意义的。

它不适用于echo,因为echo不是一个函数,而是一个语言结构。

答案 1 :(得分:2)

更改

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

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

答案 2 :(得分:1)

来自documentation

  

echo()实际上不是一个函数(它   是一种语言结构),所以你是   不需要使用括号   它。 echo()(与其他语言不同)   构造)不像一个表现   功能,所以不能总是使用   在函数的上下文中。   此外,如果你想传递更多   比echo()的一个参数,   参数不得包含在内   括号中。

这样可以正常工作:

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

无论如何,编码很糟糕。更好的是

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

答案 3 :(得分:0)

我认为这个小修补程序可以解决您的问题:

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

答案 4 :(得分:0)

这更容易阅读和处理imho

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

答案 5 :(得分:0)

我会完全删除三元运算符和空的打印字符串并写下:

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