我的一个观点中有类似的内容
<li <?php $isCurrent ? echo 'class="current"' : ''?> >
<a href="SOME_LINK" class="SOME_CLASS">SOME_TEXT</a>
</li>
这会导致语法错误,意外T_ECHO。更改echo
print
解决了这个问题,但我想了解为什么我不能使用echo
。
答案 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)
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"';
?>