我有两个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>';
}
Run Code Online (Sandbox Code Playgroud)
第一个片段有一个条件语句返回一个空字符串作为<li>内容,而第二个片段只返回包含的内容<li>.
Lorem Ipsum ...
Run Code Online (Sandbox Code Playgroud)
<li class="some-class">
Lorem Ipsum ...
</li>
Run Code Online (Sandbox Code Playgroud)
如您所见,只有没有条件语句的函数才能正确生成<li>元素.为什么一个代码段生成代码,而不是另一个?
在括号中包含条件可以解决问题,但无法帮助我理解为什么问题首先出现.
return '<li class="some-class">' . ($content == null ? '' : $content) . '</li>';
Run Code Online (Sandbox Code Playgroud)
据我所知,php应该将结尾解释</li>为条件语句的一部分,但却没有.而不是添加$content . '</li>'到输出,它只是返回$content并在某种程度上(浏览器,wordpress等),第一个<li>从输出的html中删除.
有趣的是,包装$content和</li>也无法显示<li>...</li>.
return '<li class="mep-testimonial-li">' . $content == null ? '' : ($content . '</li>');
Run Code Online (Sandbox Code Playgroud)
我希望只有在$contentnull 时才会看到这个问题,因此引用</li>将被省略,格式化将会改变.
在PHP中,与其他语言一样,连接的优先级高于比较,因此:
return '<li class="some-class">' . $content == null ? '' : $content . '</li>';
Run Code Online (Sandbox Code Playgroud)
将永远打印$content . '</li>',因为'<li class="some-class">' . $content永远不会是假的ou null.
这可能会导致无效的标记,并且无法在浏览器中正确呈现.
始终用括号括起你的三元组.
return '<li class="some-class">' . ($content == null ? '' : $content) . '</li>';
Run Code Online (Sandbox Code Playgroud)