我有一个if…elseif…else语句链,如下所示:
if (!empty($video_meta)) {
echo 'foo';
} elseif ( WPCOM_Liveblog::is_liveblog_post() ) {
echo 'bar';
} elseif (has_tag('featured')) {
echo 'foobar';
}
第二个elseif语句依赖于激活的特定WordPress插件(liveblog)。如果插件未处于活动状态,则函数将抛出致命错误,因为类WPCOM_Liveblog
不存在。
我试着使用像这样的嵌套IF语句
if (has_post_format('video')) {
echo 'foo';
} elseif (class_exists('WPCOM_Liveblog')) {
if ( WPCOM_Liveblog::is_liveblog_post() ) {
echo'bar';
}
} elseif (has_tag('featured')) {
echo 'foobar';
}
如果第二个条件为假,那么由于明显的原因,它永远不会进入最终的elseif。class_exists
条件的计算结果始终为true,if语句链终止。
我不能使用简单的&&
条件,因为我正在寻找一个停用的插件,而第二个条件只会为未知类抛出致命错误。
我也不能改变if…elseif语句的顺序。命令背后有目的。
这感觉像是一个简单的PHP问题,但我被难住了。我是否可以在elseif
中嵌套另一个条件?基本上,如果条件的第一部分为真,则执行第二个条件。如果两者都为true,则将true返回给elseif
。如果该类不存在,则第二个条件检查永远不会触发。
在PHP中,您的条件是按从左到右的顺序执行的,因此您可以执行以下操作:
elseif (class_exists('WPCOM_Liveblog') && WPCOM_Liveblog::is_liveblog_post()) {
echo'bar';
}
证明(通过视频):http://ideone.com/fAN2YK
或者,您可以将失败的测试移出循环:
$plugin_loaded = false;
if ( class_exists('WPCOM_Liveblog') ) {
$plugin_loaded = ( WPCOM_Liveblog::is_liveblog_post() ) ? true : false;
}
if (has_post_format('video')) {
echo 'foo';
} elseif ($plugin_loaded ) {
echo 'bar';
} elseif (has_tag('featured')) {
echo 'foobar';
}