php - 三元运算符的评估顺序

标签 php

我有两个 php 片段:

function prefix_shortcode_statement_conditional( $atts, $content = null ) {
    return '<li class="some-class">' . $content == null ? '' : $content . '</li>';
}

function prefix_shortcode_statement( $atts, $content = null ) {
    return '<li class="some-class">' . $content . '</li>';
}

第一个片段有一个条件语句返回一个空字符串作为 <li>内容,而第二个仅返回包裹在 <li> 中的内容.

prefix_shortcode_statement_conditional 输出

Lorem Ipsum ...

prefix_shortcode_statement 输出

<li class="some-class">
    Lorem Ipsum ... 
</li>

如您所见,只有没有条件语句的函数才能正确生成 <li>元素。为什么一个片段会生成代码,而另一个片段不会?


将条件括在括号中可以解决问题,但无法帮助我理解问题最初出现的原因。

return '<li class="some-class">' . ($content == null ? '' : $content) . '</li>';

据我所知,php 应该解释结尾 </li>作为条件语句的一部分,但失败了。而不是添加 $content . '</li>'对于输出,它只是返回 $content在某种程度上(浏览器、wordpress 等),第一个 <li>从输出的 html 中删除。

有趣的是,包装 $content</li>也无法显示 <li>...</li> .

return '<li class="mep-testimonial-li">' . $content == null ? '' : ($content . '</li>');

我希望只有在 $content 时才会看到这个问题为空,因此引用的 </li>会被省略并且格式会改变。

最佳答案

在 PHP 中,与在其他语言中一样,concatenation have a higher precedence than comparison ,所以:

return '<li class="some-class">' . $content == null ? '' : $content . '</li>';

将始终打印 $content . '</li>' , 自 '<li class="some-class">' . $content永远不会是 falsy 或 null。
这可能会导致标记无效,并且无法在浏览器中正确呈现。

始终将三元组括在括号中。

return '<li class="some-class">' . ($content == null ? '' : $content) . '</li>';

关于php - 三元运算符的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40089827/

相关文章:

php - 使用php在magento中获取商店名称

php - 文件上传php,只获取文件名

php - Mysql:基于数组的多对多查询

php - 从数据库中检索信息(1 个字段/对象;无数组)

php - Prestashop 1.7 如何添加或编辑产品条件?

php - 如果第一个参数在条件下为真,并且运算符将在下一次运行?

javascript - 使用重写规则后未加载 CSS 、 js 、 jpg png 帮助我

php - 将 Jquery + Php 搜索传递回 javascript?

php - 正则表达式,多次出现的两个字符串之间的任意字符串

php - 在 WordPress 中循环自定义帖子类型的特定类别