代码之家  ›  专栏  ›  技术社区  ›  Lombo

内联if中出现意外的标记t_echo

php
  •  3
  • Lombo  · 技术社区  · 16 年前

    我的一个观点是这样的

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

    这会导致语法错误,意外的t_echo。改变 echo 对于 print 解决了这个问题,但我想知道为什么我不能使用 回声 .

    6 回复  |  直到 16 年前
        1
  •  9
  •   Pekka    16 年前

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

    要更改结构:

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

    它与 print() 因为那是一个有返回值的函数。但这不是你想要的,因为 echo 将打印出 print 这毫无意义。

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

        2
  •  2
  •   codaddict    16 年前

    变化

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

    到

    <?php echo $isCurrent ? 'class="current"' : ''?>
    
        3
  •  1
  •   Nicolò Martini    16 年前

    从 documentation :

    echo()实际上不是一个函数(它 是一种语言构造),所以你是 不需要使用括号 它。echo()(与其他语言不同 构造)的行为不像 函数,因此不能总是使用它 在函数的上下文中。 另外,如果你想通过更多 要echo()的参数不止一个, 参数不能包含在 圆括号。

    相反,这样做很好:

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

    不管怎样,这是个糟糕的编码。更好是

    <?php echo $isCurrent ? 'class="current"' : ''?>
    
        4
  •  0
  •   Gordon Haim Evgi    16 年前

    这更容易阅读和处理imho

    <?php printf('<li%s><a href="%s" class="%s">%s</a></li>',
                  $isCurrent ? ' class="current"' : '',
                  $someLink, $someClass, $someText);
    
        5
  •  0
  •   fuxia    16 年前

    我将把三元运算符和空的打印字符串放在一起,然后写:

    <?php
    $isCurrent and print 'class="current"';
    ?>
    
        6
  •  0
  •   murze    16 年前

    我想这个小问题可以解决你的问题:

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