无法将三元运算符嵌入到echo语句中

时间:2017-05-02 09:47:47

标签: php operators ternary-operator

以下是echo声明:

    echo " <a class=\"pagination-link\" href='{$_SERVER['PATH_INFO']}?page=$nextpage#comment-target'> &gt; </a> ";

这是ternary expression。它的作用是仅当条件为真时才将#comment-target连接到链接的末尾:

( $paginationAddCommentAnchor ?? null) ? '#comment-target' : null

我需要在echo语句#comment-target中替换ternary expression,但每次尝试都会以错误的引语作为丑陋的泥球。示例尝试:

    echo " <a class=\"pagination-link\" href='{$_SERVER['PATH_INFO']}?page=$nextpage . ( $paginationAddCommentAnchor ?? null) ? '#comment-target' : null'> &gt; </a> ";

什么是正确的语法,所以最终结果与初始echo语句相同,但是使用三元语法生成?

2 个答案:

答案 0 :(得分:0)

PHP在由双引号(")括起的字符串中执行variables parsing,但这就是全部。如果需要计算表达式,则必须将其放在字符串之外,并使用string concatenation operator (.)将其值与周围的字符串连接。

或者,为了获得更易读的代码,请使用printf()

printf(' <a class="pagination-link" href="%s?page=%s%s> &gt; </a> ',
    $_SERVER['PATH_INFO'], $nextpage,
    $paginationAddCommentAnchor ? '#comment-target' : ''
);

答案 1 :(得分:0)

看起来试图在一行中做很多事情,而不是正确控制所有部分(引号,字符串连接,三元运算符......)。为了保持清晰和受控制,请在分隔的块中构建最终字符串:

$tmp_str = $nextpage . ( $paginationAddCommentAnchor ?? null) ? '#comment-target' : '';

echo "<a class=\"pagination-link\" href=\"{$_SERVER['PATH_INFO']}?page=$tmp_str\"></a>";

测试here