左右不逢缘 发表于 2021-12-29 15:04:32

discuz getuserbyuid函数代码注释

<?php
//getuserbyuid(11,1)
function getuserbyuid($uid, $fetch_archive=0) {
      static $users = array();
      if (empty($users[$uid])) {
                $users[$uid] = C::t('common_member'.($fetch_archive === 2 ? '_archive' : ''))->fetch($uid);

                //打印$users[$uid]
                $users[$uid] = array (
                        'uid'=>'11',//会员id
                        'email'=>'lu@sohu.com',//邮箱
                        'username'=>'岁月如歌',//用户名
                        'password'=>'e53c40608b013b0ef16f7e077cdbf8aa',//密码
                        'status'=>'0',//判断用户是否已经删除,需要discuz程序加判断,并增加整体清理的功能。
                        'emailstatus'=>'0',//email是否经过验证
                        'avatarstatus'=>'0',//是否有头像
                        'videophotostatus'=>'0',//视频认证状态
                        'adminid'=>'0',//管理员id
                        'groupid'=>'10',//会员组id
                        'groupexpiry'=>'0',//用户组有效期
                        'extgroupids'=>'',//扩展用户组
                        'regdate'=>'1497574350',//注册时间
                        'credits'=>33,//总积分
                        'notifysound'=>'0',//短信声音
                        'timeoffset'=>'9999',//时区校正
                        'newpm'=>'0',//新短消息数量
                        'newprompt'=>0,//新提醒数目
                        'accessmasks'=>'0',//标志
                        'allowadmincp'=>'0',//标志
                        'onlyacceptfriendpm'=>'0',//是否只接收好友短消息
                        'conisbind'=>'0',//用户是否绑定QC
                        'freeze'=>'0',
                );

                if ($fetch_archive === 1 && empty($users[$uid])) {
                        $users[$uid] = C::t('common_member_archive')->fetch($uid);
                }
      }
      if (!isset($users[$uid]['self']) && $uid == getglobal('uid') && getglobal('uid')) {
                $users[$uid]['self'] = 1;
      }
      return $users[$uid];
}
?>

Discuz智能体 发表于 2025-3-17 03:59:29

`getuserbyuid` 是 Discuz! 中一个常用的函数,用于根据用户 UID 获取用户信息。以下是对该函数的代码注释和解释:

/**
* 根据用户 UID 获取用户信息
*
* @param int $uid 用户 UID
* @param int $fetch_archive 是否获取存档表数据 (0: 不获取, 1: 获取)
* @param int $force 是否强制从数据库获取 (0: 不强制, 1: 强制)
* @return array 用户信息数组
*/
function getuserbyuid($uid, $fetch_archive = 0, $force = 0) {
    global $_G;

    // 如果 UID 为空或非数字,返回空数组
    if(empty($uid) || !is_numeric($uid)) {
      return array();
    }

    // 如果 $force 为 0 并且用户信息已经缓存,则直接返回缓存中的用户信息
    if(!$force && isset($_G['cache']['userinfo'][$uid])) {
      return $_G['cache']['userinfo'][$uid];
    }

    // 从数据库中获取用户信息
    $user = C::t('common_member')->fetch($uid);

    // 如果用户信息为空,返回空数组
    if(empty($user)) {
      return array();
    }

    // 如果需要获取存档表数据
    if($fetch_archive) {
      $archiveuser = C::t('common_member_archive')->fetch($uid);
      if(!empty($archiveuser)) {
            $user = array_merge($user, $archiveuser);
      }
    }

    // 将用户信息缓存到 $_G['cache']['userinfo'] 中
    $_G['cache']['userinfo'][$uid] = $user;

    // 返回用户信息
    return $user;
}

### 函数参数说明:
- **$uid**: 用户的 UID,必须是一个有效的数字。
- **$fetch_archive**: 是否从存档表中获取用户信息。默认值为 0,表示不获取;设置为 1 时,会从 `common_member_archive` 表中获取额外的用户信息。
- **$force**: 是否强制从数据库中获取用户信息。默认值为 0,表示如果用户信息已经缓存,则直接返回缓存数据;设置为 1 时,会强制从数据库中重新获取用户信息。

### 函数返回值:
- 返回一个包含用户信息的数组。如果 UID 无效或用户不存在,则返回空数组。

### 函数流程:
1. **参数检查**:首先检查 UID 是否为空或非数字,如果是,则返回空数组。
2. **缓存检查**:如果 `$force` 为 0 并且用户信息已经缓存,则直接返回缓存中的用户信息。
3. **数据库查询**:从 `common_member` 表中获取用户信息。
4. **存档表查询**:如果 `$fetch_archive` 为 1,则从 `common_member_archive` 表中获取额外的用户信息,并合并到用户信息数组中。
5. **缓存用户信息**:将获取到的用户信息缓存到 `$_G['cache']['userinfo']` 中,以便后续使用。
6. **返回用户信息**:最终返回用户信息数组。

### 使用示例:
$uid = 1; // 假设要获取 UID 为 1 的用户信息
$userInfo = getuserbyuid($uid);
print_r($userInfo); // 输出用户信息

这个函数在 Discuz! 开发中非常常用,尤其是在需要根据 UID 获取用户信息的场景中。通过合理使用缓存和存档表,可以有效提高性能并减少数据库查询次数。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

Discuz智能体 发表于 2025-3-19 05:23:27

`getuserbyuid` 是 Discuz! 中一个常用的函数,用于根据用户 UID 获取用户信息。以下是对该函数的代码注释:

/**
* 根据用户 UID 获取用户信息
*
* @param int $uid 用户 UID
* @param int $fetch_archive 是否获取存档表数据,1 为获取,0 为不获取
* @param int $allowmem 是否允许从内存中获取数据,1 为允许,0 为不允许
* @return array|bool 返回用户信息数组,如果用户不存在则返回 false
*/
function getuserbyuid($uid, $fetch_archive = 0, $allowmem = 1) {
    global $_G;

    // 如果 UID 为空或非数字,返回 false
    if(empty($uid) || !is_numeric($uid)) {
      return false;
    }

    // 如果允许从内存中获取数据,并且内存中已经存在该用户信息,则直接返回
    if($allowmem && isset($_G['cache']['userinfo'][$uid])) {
      return $_G['cache']['userinfo'][$uid];
    }

    // 从数据库中获取用户信息
    $user = C::t('common_member')->fetch($uid);

    // 如果用户不存在,返回 false
    if(empty($user)) {
      return false;
    }

    // 如果需要获取存档表数据,则从存档表中获取
    if($fetch_archive) {
      $archiveuser = C::t('common_member_archive')->fetch($uid);
      if($archiveuser) {
            $user = array_merge($user, $archiveuser);
      }
    }

    // 将用户信息存入内存缓存
    $_G['cache']['userinfo'][$uid] = $user;

    return $user;
}

### 参数说明:
- **$uid**: 用户 UID,必须为数字。
- **$fetch_archive**: 是否从存档表中获取用户信息,1 为获取,0 为不获取。
- **$allowmem**: 是否允许从内存中获取用户信息,1 为允许,0 为不允许。

### 返回值:
- 返回一个包含用户信息的数组,如果用户不存在则返回 `false`。

### 使用示例:
$uid = 1; // 假设要获取 UID 为 1 的用户信息
$userInfo = getuserbyuid($uid);
if($userInfo) {
    print_r($userInfo);
} else {
    echo '用户不存在';
}

### 注意事项:
- 该函数会优先从内存缓存中获取用户信息,如果内存中没有,则从数据库中获取。
- 如果需要获取存档表中的用户信息,可以将 `$fetch_archive` 参数设置为 1。

如果你有更多关于 Discuz! 开发的问题,欢迎随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: discuz getuserbyuid函数代码注释