重构分析总结:参数传递与变量命名规范
本文最后更新于166 天前,其中的信息可能已经过时,如有错误请发送邮件到184874483@qq.com

1. 变量名选择的本质规律

wp_get_current_user() → 赋值给 $current_user 或 $user → 传递给 get_user_level()

差异的原因:

变量名使用场景说明
$current_user强调当前会话用户常用于权限检查、当前操作
$user通用用户参数可能被复用、传递给其他函数

2. 参数传递的一致性

所有 get_user_level() 调用实际接收的是 WP_User对象,无论变量名叫什么:

// 三种等效写法:
PSG_Security_Helper::get_user_level($current_user);
PSG_Security_Helper::get_user_level($user);
PSG_Security_Helper::get_user_level(wp_get_current_user());

重构原则总结

原则1:变量名应反映语义,而非技术细节

// ✅ 好:明确表示"当前用户级别"
$current_user_level = PSG_Security_Helper::get_user_level(wp_get_current_user());

// ✅ 好:通用场景
$user = get_user_by('id', $user_id);
$user_level = PSG_Security_Helper::get_user_level($user);

// ❌ 避免:混用
$level = PSG_Security_Helper::get_user_level($current_user); // $level 不够明确

原则2:减少全局变量依赖

// ✅ 好:通过函数获取,非全局变量
$current_user = wp_get_current_user();

// ❌ 避免:直接使用全局变量
global $current_user; // 除非必要,否则避免

原则3:参数设计应考虑扩展性

PSG_Security_Helper::get_user_level() 应该支持:

// 多态参数设计:
get_user_level(null);                    // 当前用户
get_user_level($wp_user_object);         // 用户对象
get_user_level(123);                     // 用户ID
get_user_level('admin@example.com');     // 用户邮箱(可选扩展)

重构建议的具体实现

步骤1:增强统一方法(带向后兼容)

class PSG_Security_Helper {
    /**
     * 获取用户权限级别(增强版)
     *
     * @param mixed $user WP_User对象|用户ID|字符串|null
     * @return int 用户级别,0表示访客
     */
    public static function get_user_level($user = null) {
        // 1. 处理默认情况(当前用户)
        if (is_null($user)) {
            $user = wp_get_current_user();
        }
        
        // 2. 处理用户ID
        if (is_numeric($user)) {
            $user = get_user_by('ID', (int)$user);
        }
        
        // 3. 验证用户对象
        if (!$user instanceof WP_User || empty($user->roles)) {
            return 0; // 访客
        }
        
        // 4. 计算最高权限级别
        $highest_level = 0;
        foreach ((array)$user->roles as $role) {
            if (isset(self::$role_levels[$role])) {
                $highest_level = max($highest_level, self::$role_levels[$role]);
            }
        }
        
        return $highest_level;
    }
}

步骤2:建立命名约定(可选,但推荐)

/**
 * 项目变量命名约定示例:
 * 
 * $current_user     - WordPress当前登录用户对象
 * $target_user      - 操作目标用户(非当前用户)
 * $user             - 通用用户对象(根据上下文)
 * $user_level       - 用户权限级别
 * $current_level    - 当前用户级别(如果上下文明确)
 * $required_level   - 需要的权限级别
 * $minimum_level    - 最低要求级别
 */

步骤3:上下文感知的重构策略

情况A:当前用户权限检查

// 原代码:
$current_user = wp_get_current_user();
$user_level = PSG_Security_Helper::get_user_level($current_user);

// 可简化为(但保持变量名明确性):
$current_user_level = PSG_Security_Helper::get_user_level(); // 使用null参数

情况B:特定用户权限检查

// 原代码:
public function check_user_access($user) {
    $user_level = PSG_Security_Helper::get_user_level($user);
    // ...
}

// 保持原样,$user 来自参数

需要特别注意的上下文

需要具体检查:

1. class-file-browser.php 第467行

// 这个条件判断很重要
if (! function_exists('wp_get_current_user')) {
    // 可能需要引入WordPress函数
}

2. 所有调用处的参数来源

需要确保这些情况都正确处理:

  • 情况1:用户未登录 → 应该返回0
  • 情况2:用户角色不在映射中 → 应该返回0
  • 情况3:多角色用户 → 返回最高级别

需要验证的问题:

  1. class-file-browser.php 中的特殊判断是否需要保留
  2. 访客用户是否应该返回0(统一标准)
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇