我不明白WordPress函数“is_super_admin”的逻辑

I don't understand the logic of the WordPress function 'is_super_admin'

提问人:djs 提问时间:2/1/2017 更新时间:2/1/2017 访问量:66

问:

我目前正在学习WordPress核心,并在学习中遇到了这个功能:

 /**
 * Determine if user is a site admin.
 *
 * @since 3.0.0
 *
 * @param int $user_id (Optional) The ID of a user. Defaults to the current user.
 * @return bool True if the user is a site admin.
 */
function is_super_admin( $user_id = false ) {
  if ( ! $user_id || $user_id == get_current_user_id() )
    $user = wp_get_current_user();
  else
    $user = get_userdata( $user_id );

  if ( ! $user || ! $user->exists() )
    return false;

  if ( is_multisite() ) {
    $super_admins = get_super_admins();
    if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) )
      return true;
  } else {
    if ( $user->has_cap('delete_users') )
      return true;
  }

  return false;
}

我仍然是一个初学者程序员,所以这可能是一个愚蠢的问题,但首先的逻辑如果......else 语句对我来说似乎很奇怪:

if ( ! $user_id || $user_id == get_current_user_id() )
    $user = wp_get_current_user();
else
    $user = get_userdata( $user_id );

为什么我们需要这种逻辑比较?

$user_id == get_current_user_id()

在我看来,如果传入一个 $user_id,我们应该调用 get_userdata( $user_id ),如果没有传入 $user_id,那么我们应该调用 wp_get_current_user(),如下所示:

$user = $user_id ? get_userdata($user_id) : wp_get_current_user();

$user_id == get_current_user_id() 的整个比较只会增加额外的工作,对吧?以这种方式编写函数的一些可能理由是什么?

php wordpress 逻辑运算符 boolean-logic

评论


答:

1赞 Ralph Thomas Hopper 2/1/2017 #1

!$user_id ||$user id:== get_current_user_id() is 语句为 true,因此,如果调用函数时user_id为 false,或者如果传递的user_id实际上是当前用户,则仅加载当前用户会更有效。无数据库查询。

否则,如果指定了user_id,则必须触发查询才能获取其数据。

逻辑没问题:)