PHP代码规范遵循哪套

wen PHP项目 2

本文目录导读:

PHP代码规范遵循哪套

  1. 核心规范:PSR-12(当前主流)
  2. 基础规范:PSR-1
  3. 自动加载规范:PSR-4
  4. 除了 PSR 之外的默认规则
  5. 对于团队的落地建议

PHP 社区最主流、最权威的代码规范是 PSR 标准(PHP Standards Recommendation,PHP 标准建议),由 PHP-FIG(PHP Framework Interop Group,PHP 框架互操作小组)制定。

在实际开发中,主要遵循 PSR-1(基础编码规范)和 PSR-12(扩展编码风格指南),同时结合 PSR-4(自动加载规范)来组织项目结构。

以下是详细的梳理:

核心规范:PSR-12(当前主流)

PSR-12 是 PSR-2 的继承者,是目前最推荐的编码风格指南,它规定了代码的“长相”。

  • 缩进:必须使用 4个空格 进行缩进,禁止使用 Tab 键。
  • 换行:每行代码长度建议不超过 120 个字符(硬性限制为 80 个字符更好,但非强制,软限制为 120)。
  • 大括号
    • 类、方法、控制结构(if, for, while):大括号必须独占一行(类和方法),但建议 控制结构(if/else)的大括号与结构名在同一行,结束大括号独占一行。
  • 关键字:PHP 关键字(如 ifelsetruenull)必须使用小写
  • 命名空间和 use:命名空间声明和 use 声明必须各占一行,use 语句必须按字母顺序排列。
  • 方法:方法名后不得有空格, 前不得有空格, 前不得有空格。
  • 可见性:所有属性和方法必须声明可见性(publicprotectedprivate),不能隐式地写成 var

基础规范:PSR-1

这是最底层的规则,所有 PHP 代码都必须符合。

  • 文件:文件必须使用 <?php<?= 标签;文件必须不带 BOM 的 UTF-8 编码。
  • 副作用:一个文件要么用来定义(类、函数、常量等),要么用来执行(业务逻辑),两者不能混合(即不要在定义类的文件里直接运行代码写逻辑)。
  • 命名
    • 类名:必须使用 StudlyCaps(大驼峰,UserController)。
    • 方法名:必须使用 camelCase(小驼峰,getUserName)。
    • 常量:必须使用大写字母,以下划线分隔(MAX_ATTEMPTS)。

自动加载规范:PSR-4

虽然它不涉及代码风格,但它是项目结构的规范,现代框架(如 Laravel、Symfony)都依赖它。

  • 命名空间与目录对应:完全限定的类名必须映射到文件路径。
  • 示例:命名空间 App\Controllers 对应目录 ./app/Controllers,类名 HomeController 必须存在于 ./app/Controllers/HomeController.php 文件中。

除了 PSR 之外的默认规则

下面这些规则虽然不全是 PSR 强制要求的,但属于社区公认的“潜规则”或结合了 PSR 的常规用法:

  • 组合规范(PSR-12 + 传统惯例)
    • 命名空间:通常使用大驼峰App\Services)。
    • 变量/属性:通常使用 camelCase(小驼峰,$userName)。
    • 函数:通常使用 camelCase(小驼峰,getUserById())。
  • 控制结构空格ifforwhile 等关键字后必须有一个空格,而函数调用后不能有空格。
    • 正确:if ($a > $b) { echo "hi"; }
    • 错误:if($a > $b) (关键字后没空格)

对于团队的落地建议

如果你是在团队中开发,仅仅依赖文档是不够的,建议使用以下工具强制规范:

  1. PHP-CS-Fixer(最常用):完全自动修复代码风格,直接符合 PSR-12。
    • 命令:php-cs-fixer fix path/to/project --rules=@PSR12
  2. PHP_CodeSniffer (PHPCS):检测代码是否符合规范。
    • 命令:phpcs --standard=PSR12 path/to/file
  3. PHPStan / Psalm:这是静态分析工具(检查逻辑错误),不直接管风格,但通常与 PSR 规范配合使用。

最核心的答案:遵循 PSR-1PSR-12(如果是老项目或框架如 Laravel 5 之前的,可能会用 PSR-2,但现在统一切换到 PSR-12)。

如果你使用的是 Laravel,Laravel 官方也是基于 PSR-4 自动加载,并建议遵循 PSR-12(Laravel 框架代码本身用 PSR-2 编写,但官方公开文档要求新代码遵循 PSR-12)。

抱歉,评论功能暂时关闭!