如何使用“class_exists”条件if ... elseif

时间:2015-03-19 02:48:31

标签: php

我有一系列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。如果该类不存在,则第二个条件检查永远不会触发。

2 个答案:

答案 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';
}