PHP编码规范与团队协作最佳实践
团队协作开发时,统一的编码规范很重要。代码风格一致了,看别人的代码就像看自己的代码。今天说说PHP团队开发中常用的编码规范和协作实践。
先说说编辑器配置。一个.editorconfig文件可以让团队使用统一的缩进和编码风格。
```
# .editorconfig
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
[*.md]
trim_trailing_whitespace = false
```
PHP_CodeSniffer可以自动化检查代码规范。配置好规则后,提交代码前自动检查。
```php
// 符合PSR-12规范的代码
declare(strict_types=1);
namespace App\Services;
use App\Models\User;
use App\Repositories\UserRepository;
class UserService
{
public function __construct(
private UserRepository $repository
) {}
public function findUser(int $id): ?User
{
return $this->repository->findById($id);
}
public function createUser(string $name, string $email): User
{
$user = new User($name, $email);
$this->repository->save($user);
return $user;
}
}
?>
```
Git提交前用pre-commit钩子检查代码质量:
```php
// pre-commit钩子示例
$files = [];
exec('git diff --cached --name-only --diff-filter=d', $files);
$phpFiles = array_filter($files, fn($f) => pathinfo($f, PATHINFO_EXTENSION) === 'php');
$hasErrors = false;
foreach ($phpFiles as $file) {
// 语法检查
exec("php -l $file 2>&1", $output, $code);
if ($code !== 0) {
echo "语法错误: $file\n";
echo implode("\n", $output) . "\n";
$hasErrors = true;
}
// PHPStan检查
// exec("phpstan analyse $file --level=8 2>&1", $output, $code);
// if ($code !== 0) {
// echo "PHPStan错误: $file\n";
// $hasErrors = true;
// }
}
if ($hasErrors) {
exit(1);
}
?>
```
代码审查清单可以规范审查流程:
```php
class CodeReviewChecklist
{
public static function getChecklist(): array
{
return [
'代码风格' => [
'遵循PSR-12编码规范',
'命名规范:类PascalCase,方法camelCase,常量UPPER_CASE',
'没有遗留的调试代码(var_dump、dd等)',
'没有大段注释掉的代码',
],
'安全性' => [
'使用预处理语句,不是拼接SQL',
'输出到HTML时做了转义',
'用户上传做了类型和大小验证',
'密码用password_hash存储',
'敏感数据没有硬编码',
],
'性能' => [
'没有N+1查询问题',
'循环中没有重复的数据库查询',
'合理使用了缓存',
'批量操作用了事务',
],
'可维护性' => [
'方法不超过30行',
'类不超过500行',
'有单元测试覆盖',
'复杂逻辑有注释',
'没有重复代码(DRY原则)',
],
'异常处理' => [
'可能出错的地方有try-catch',
'异常信息有日志记录',
'用户看到的是友好的错误提示',
],
];
}
public static function printChecklist(): void
{
foreach (self::getChecklist() as $category => $items) {
echo "\n=== $category ===\n";
foreach ($items as $item) {
echo "[ ] $item\n";
}
}
}
}
CodeReviewChecklist::printChecklist();
?>
```
Git工作流程规范:
```php
// 分支命名规范
// feature/xxx - 新功能
// bugfix/xxx - Bug修复
// hotfix/xxx - 紧急修复
// release/xxx - 发布准备
// 提交信息规范
// feat: 新功能
// fix: Bug修复
// docs: 文档
// style: 代码风格
// refactor: 重构
// test: 测试
// chore: 构建/工具
// 示例提交信息
// feat: 添加用户注册功能
// fix: 修复订单金额计算错误
// docs: 更新API文档
// refactor: 提取公共查询方法
?>
```
好的编码规范和协作流程是团队高质量交付的保障。工具可以自动化检查大部分规范,但代码的可读性和设计合理性还是需要人来判断。建立起合适的规范和流程后,团队协作会顺畅很多。
PHP编码规范与团队协作最佳实践