编码规则
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)php
class UserController class PayService - 方法名:使用小驼峰命名法(camelCase)php
public function getUserList() private function processPayment() - 私有方法:以双下划线开头(__privateMethod)php
private function __generateToken()
1.3 变量命名
- 普通变量:使用小驼峰命名法(camelCase)php
$userId $paymentAmount - 常量:使用大写字母,单词之间用下划线分隔(SNAKE_CASE)php
const MAX_PAGE_SIZE = 100; define('API_VERSION', '1.0'); - 配置参数:使用小写字母,单词之间用下划线分隔(snake_case)php
'app_id' => 'your_app_id', 'api_key' => 'your_api_key',
2. 代码风格
2.1 缩进和换行
- 使用4个空格进行缩进(不使用制表符)
- 每行代码长度不超过120个字符
- 大括号使用"K&R"风格,即左大括号与语句同一行,右大括号单独一行php
if ($condition) { // 代码块 } else { // 代码块 }
2.2 注释规范
- 类注释:使用PHPDoc格式,包含类的描述、作者、创建时间等信息php
/** * 用户控制器 * @author Niucloud Team * @since 2026-04-02 */ class UserController - 方法注释:使用PHPDoc格式,包含方法描述、参数、返回值等信息php
/** * 获取用户列表 * @param array $params 查询参数 * @return array 用户列表 */ public function getUserList($params) - 行内注释:使用//开头,注释内容与代码保持适当距离php
$userId = 1; // 用户ID
2.3 空格使用
- 操作符两侧使用空格php
$result = $a + $b; - 逗号后使用空格php
function($param1, $param2) - 括号内不使用空格php
if ($condition) - 函数参数之间使用空格php
function($param1, $param2)
3. 代码结构
3.1 类结构
- 类的成员变量放在类的开头
- 构造函数和析构函数放在成员变量之后
- 公共方法放在私有方法之前
- 静态方法放在实例方法之前php
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 文件结构
- 每个文件只包含一个类
- 文件开头使用命名空间声明
- 导入必要的类和函数
- 类定义后使用适当的空白行分隔不同的方法php
namespace app\adminapi\controller\user; use think\Controller; use app\model\sys\SysUser; class UserController extends Controller { // 方法定义 }
4. 错误处理
4.1 异常处理
- 使用try-catch块捕获异常
- 异常信息要清晰明确
- 记录异常日志php
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攻击等安全问题php
// 使用验证器 $validate = validate('User'); if (!$validate->check($data)) { return json(['code' => 400, 'message' => $validate->getError()]); }
5.2 权限控制
- 实现基于角色的权限控制
- 验证用户权限
- 防止越权访问php
// 检查权限 if (!$this->checkPermission('user:edit')) { return json(['code' => 403, 'message' => '无权限操作']); }
6. 性能优化
6.1 数据库优化
- 使用索引
- 避免全表扫描
- 合理使用缓存php
// 使用索引查询 $user = Db::name('user')->where('id', $id)->find(); // 使用缓存 $cacheKey = 'user_' . $id; $user = cache($cacheKey); if (!$user) { $user = Db::name('user')->where('id', $id)->find(); cache($cacheKey, $user, 3600); }
6.2 代码优化
- 减少重复代码
- 优化循环和条件判断
- 使用适当的数据结构php
// 优化前 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
<?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
<?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
<?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']
];
}