gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:30:16 26 4
gpt4 key购买 nike

我有两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com