我有一系列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
。如果该类不存在,则第二个条件检查永远不会触发。
答案 0 :(得分:0)
在PHP中,您的条件按从左到右的顺序执行,因此您可以执行以下操作:
elseif (class_exists('WPCOM_Liveblog') && WPCOM_Liveblog::is_liveblog_post()) {
echo'bar';
}
证明(通过ideone):http://ideone.com/fAN2YK
答案 1 :(得分:0)
或者,您可以移动失败的测试:
$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';
}