NIUCLOUD LITE AI开发文档--命名规范

编码规则​

1. 命名规范​

1.1 目录和文件命名​

  • 目录名 :使用小写字母,单词之间用下划线分隔(snake_case)

    复制代码
    app/adminapi/controller/sys/
    app/model/pay/
  • 文件名 :使用小写字母,单词之间用下划线分隔(snake_case)

    复制代码
    user.php
    pay_channel.php
  • 类文件名 :使用驼峰命名法(PascalCase),与类名保持一致

    复制代码
    User.php
    PayChannel.php

1.2 类和方法命名​

  • 类名 :使用大驼峰命名法(PascalCase)

    复制代码
    class UserController
    class PayService
  • 方法名 :使用小驼峰命名法(camelCase)

    复制代码
    public function getUserList()
    private function processPayment()
  • 私有方法 :以双下划线开头(__privateMethod)

    复制代码
    private function __generateToken()

1.3 变量命名​

  • 普通变量 :使用小驼峰命名法(camelCase)

    复制代码
    $userId
    $paymentAmount
  • 常量 :使用大写字母,单词之间用下划线分隔(SNAKE_CASE)

    复制代码
    const MAX_PAGE_SIZE = 100;
    define('API_VERSION', '1.0');
  • 配置参数 :使用小写字母,单词之间用下划线分隔(snake_case)

    复制代码
    'app_id' => 'your_app_id',
    'api_key' => 'your_api_key',

2. 代码风格​

2.1 缩进和换行​

  • 使用4个空格进行缩进(不使用制表符)

  • 每行代码长度不超过120个字符

  • 大括号使用"K&R"风格,即左大括号与语句同一行,右大括号单独一行

    复制代码
    if ($condition) {
        // 代码块
    } else {
        // 代码块
    }

2.2 注释规范

  • 类注释:使用PHPDoc格式,包含类的描述、作者、创建时间等信息
  • 方法注释:使用PHPDoc格式,包含方法描述、参数、返回值等信息
  • 行内注释 :使用//开头,注释内容与代码保持适当距离

    复制代码
    $userId = 1; // 用户ID

2.3 空格使用​

  • 操作符两侧使用空格

    复制代码
    $result = $a + $b;
  • 逗号后使用空格

    复制代码
    function($param1, $param2)
  • 括号内不使用空格

    复制代码
    if ($condition)
  • 函数参数之间使用空格

    复制代码
    function($param1, $param2)

3. 代码结构​

3.1 类结构​

  • 类的成员变量放在类的开头

  • 构造函数和析构函数放在成员变量之后

  • 公共方法放在私有方法之前

  • 静态方法放在实例方法之前

    复制代码
    class User {
        private $id;
        private $name;
        
        public function __construct($id, $name) {
            $this->id = $id;
            $this->name = $name;
        }
        
        public static function create($data) {
            // 创建用户
        }
        
        public function getName() {
            return $this->name;
        }
        
        private function __validateData($data) {
            // 验证数据
        }
    }

3.2 文件结构​

  • 每个文件只包含一个类

  • 文件开头使用命名空间声明

  • 导入必要的类和函数

  • 类定义后使用适当的空白行分隔不同的方法

    复制代码
    namespace app\adminapi\controller\user;
    
    use think\Controller;
    use app\model\sys\SysUser;
    
    class UserController extends Controller {
        // 方法定义
    }

4. 错误处理​

4.1 异常处理​

  • 使用try-catch块捕获异常
  • 异常信息要清晰明确
  • 记录异常日志

try { // 可能抛出异常的代码 } catch (Exception e) { // 记录日志 log_error(e->getMessage()); // 返回错误信息 return json('code' =\> 500, 'message' =\> '操作失败'); }

复制代码
### 4.2 错误返回
- API接口返回统一的错误格式
- 错误码和错误信息要一致
- 对用户友好的错误提示
```php
// 成功返回
return json(['code' => 200, 'message' => 'success', 'data' => $data]);

// 错误返回
return json(['code' => 400, 'message' => '参数错误']);

5. 安全规范​

5.1 输入验证​

  • 对所有用户输入进行验证

  • 使用框架的验证机制

  • 防止SQL注入、XSS攻击等安全问题

    复制代码
    // 使用验证器
    $validate = validate('User');
    if (!$validate->check($data)) {
        return json(['code' => 400, 'message' => $validate->getError()]);
    }

5.2 权限控制​

  • 实现基于角色的权限控制

  • 验证用户权限

  • 防止越权访问

    复制代码
    // 检查权限
    if (!$this->checkPermission('user:edit')) {
        return json(['code' => 403, 'message' => '无权限操作']);
    }

6. 性能优化​

6.1 数据库优化​

  • 使用索引
  • 避免全表扫描
  • 合理使用缓存

6.2 代码优化​

  • 减少重复代码

  • 优化循环和条件判断

  • 使用适当的数据结构

    复制代码
    // 优化前
    for ($i = 0; $i < count($users); $i++) {
        // 处理每个用户
    }
    
    // 优化后
    $count = count($users);
    for ($i = 0; $i < $count; $i++) {
        // 处理每个用户
    }

7. 版本控制​

7.1 Git规范​

  • 提交信息要清晰明确

  • 分支管理要规范

  • 定期合并代码

    复制代码
    # 提交信息格式
    feat: 添加新功能
    fix: 修复bug
    docs: 更新文档
    style: 代码风格调整
    refactor: 代码重构
    test: 测试相关
    chore: 构建或依赖更新

7.2 代码审查​

  • 定期进行代码审查
  • 遵循代码规范
  • 确保代码质量

8. 代码示例​

8.1 控制器示例​

复制代码
<?php
namespace app\adminapi\controller\user;

use app\adminapi\controller\BaseController;
use app\model\sys\SysUser;
use app\validate\sys\UserValidate;

/**
 * 用户控制器
 */
class UserController extends BaseController {
    /**
     * 获取用户列表
     */
    public function lists() {
        $params = $this->request->param();
        $userModel = new SysUser();
        $list = $userModel->getUserList($params);
        return success($list);
    }
    
    /**
     * 添加用户
     */
    public function add() {
        $data = $this->request->param();
        $validate = new UserValidate();
        if (!$validate->check($data)) {
            return error($validate->getError());
        }
        $userModel = new SysUser();
        $result = $userModel->addUser($data);
        return success($result);
    }
    
    /**
     * 编辑用户
     */
    public function edit($id) {
        $data = $this->request->param();
        $validate = new UserValidate();
        if (!$validate->check($data)) {
            return error($validate->getError());
        }
        $userModel = new SysUser();
        $result = $userModel->editUser($id, $data);
        return success($result);
    }
    
    /**
     * 删除用户
     */
    public function del($id) {
        $userModel = new SysUser();
        $result = $userModel->delUser($id);
        return success($result);
    }
}

8.2 模型示例​

复制代码
<?php
namespace app\model\sys;

use think\Model;

/**
 * 用户模型
 */
class SysUser extends Model {
    protected $name = 'sys_user';
    
    /**
     * 获取用户列表
     */
    public function getUserList($params) {
        $page = $params['page'] ?? 1;
        $limit = $params['limit'] ?? 10;
        
        $query = $this->field('id, username, nickname, email, phone, status, create_time');
        
        if (!empty($params['username'])) {
            $query->where('username', 'like', '%' . $params['username'] . '%');
        }
        
        if (isset($params['status'])) {
            $query->where('status', $params['status']);
        }
        
        $list = $query->paginate([
            'page' => $page,
            'list_rows' => $limit
        ]);
        
        return $list;
    }
    
    /**
     * 添加用户
     */
    public function addUser($data) {
        // 加密密码
        $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);
        $data['create_time'] = time();
        $data['update_time'] = time();
        
        return $this->save($data);
    }
    
    /**
     * 编辑用户
     */
    public function editUser($id, $data) {
        if (!empty($data['password'])) {
            $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT);
        }
        $data['update_time'] = time();
        
        return $this->where('id', $id)->update($data);
    }
    
    /**
     * 删除用户
     */
    public function delUser($id) {
        return $this->where('id', $id)->delete();
    }
}

8.3 验证器示例​

复制代码
<?php
namespace app\validate\sys;

use think\Validate;

/**
 * 用户验证器
 */
class UserValidate extends Validate {
    protected $rule = [
        'username' => 'require|length:2,20',
        'password' => 'require|length:6,20',
        'email' => 'email',
        'phone' => 'mobile',
        'status' => 'in:0,1'
    ];
    
    protected $message = [
        'username.require' => '用户名不能为空',
        'username.length' => '用户名长度在2-20之间',
        'password.require' => '密码不能为空',
        'password.length' => '密码长度在6-20之间',
        'email.email' => '邮箱格式不正确',
        'phone.mobile' => '手机号格式不正确',
        'status.in' => '状态值不正确'
    ];
    
    protected $scene = [
        'add' => ['username', 'password', 'email', 'phone', 'status'],
        'edit' => ['email', 'phone', 'status']
    ];
}
相关推荐
WL学习笔记1 小时前
模板初阶(C++)
开发语言·c++·后端·模板初阶
SunnyDays10111 小时前
使用 Java 高效管理 Excel 批注:添加、读取、修改和删除
java·开发语言·excel
ydjs678899-bot2 小时前
为什么大型monorepos变慢了Rush.js + Sparo对此做了什么
开发语言·javascript·ecmascript
坊钰2 小时前
【LangGraph框架入门级】12. 人机交互:interrupt 中断与 Command 恢复
开发语言·数据库·python·人机交互·ai编程·langgraph
开开心心就好2 小时前
打印机卡住打不了?一键清理卡死打印队列
服务器·开发语言·算法·pdf·ocr·idea·visual studio code
David猪大卫2 小时前
【C++修炼】STL容器—模板进阶:非类型模板参数、模板特化、模板分离编译
c语言·开发语言·c++·经验分享·笔记·学习·面试
牛战士coding2 小时前
Java 对象写入 Redis 后类型变了?Jackson 多态序列化问题复盘
java·开发语言·redis
Chasing__Dreams2 小时前
python杂识--24--Nuitak打包exe
开发语言·python
yuniko-n2 小时前
【JUC】读写锁
java·开发语言