在本例中,为什么在检入in_array之前检查isset和is_array非常重要?

时间:2017-05-16 作者:Ram Iyer

我正在构建一个插件,无意中发现了codex中login\\u重定向过滤器的页面,在那里我发现了一个特殊的示例:

function my_login_redirect( $redirect_to, $request, $user ) {

    //is there a user to check?

    if ( isset( $user->roles ) && is_array( $user->roles ) ) {

        //check for admins

        if ( in_array( \'administrator\', $user->roles ) ) {

            // redirect them to the default place

            return $redirect_to;

        } else {

            return home_url();

        }

    } else {

        return $redirect_to;

    }
}

add_filter( \'login_redirect\', \'my_login_redirect\', 10, 3 );
我的问题是,为什么在检查所需的值是否位于数组中之前,检查是否设置了用户角色以及输出是否为数组很重要?

据我所知,每个用户都有一个默认角色,roles属性是WPUser类参考页上提到的数组数据类型(https://codex.wordpress.org/Class_Reference/WP_User -> 在公共属性下进行检查)。

总而言之,我们不能简单地做如下事情:

if (in_array(\'administrator\', $user->roles)) {
    return $redirect_to;
} else {
    return $home_url;
}
编程是否有一些概念性的东西我遗漏了?

1 个回复
最合适的回答,由SO网友:Milo 整理而成

因为只需要第一个参数$user 可能是WP_Error 对象,如果尝试登录的用户不是有效用户。

$user (WP\\u User或WP\\u Error)(可选)如果登录成功,则为WP\\u User对象,否则为WP\\u Error对象。默认值:无

结束