PSR-12 扩展了 PSR-1 和已弃用的 PSR-2,为现代 PHP 提供了全面的编码规范。该标准通过定义特定的格式规则来确保 PHP 代码的一致性。
关键样式规则
- 常规代码布局:
- 文件必须使用 Unix LF 行尾符。
- 文件必须以单个空行结尾。
- 必须省略 PHP 文件中的
- 代码行应限制在 80 个字符以内。
- 命名空间声明后必须有一行空行。
- 开括号必须与语句在同一行。
- 类结构:
以下是一个符合规范的类示例:
<?php declare(strict_types=1); namespace VendorPackage; use VendorPackageSomeClass; use VendorPackageAnotherClass as Another; class ClassName extends ParentClass implements ArrayAccess, Countable { private const VERSION = '1.0'; public function methodName(int $arg1, ?string $arg2): string { // 方法体 } } ?>
登录后复制
- 控制结构:
以下示例展示了 PSR-12 中控制结构的格式化规范:
立即学习“”;
<?php if ($expr1) { // if 代码块 } elseif ($expr2) { // elseif 代码块 } else { // else 代码块 } switch ($expr) { case 0: echo '第一个 case'; break; default: echo '默认 case'; break; } try { // try 代码块 } catch (FirstThrowableType $e) { // catch 代码块 } finally { // finally 代码块 } ?>
登录后复制
现代 PHP 功能
- 类型声明:
以下示例展示了如何在方法签名中使用类型声明:
<?php public function processUser( User $user, ?array $options = null ): ?Response { // 实现 } ?>
登录后复制
- 属性语法:
以下示例展示了如何在 PHP 8 中使用属性语法:
<?php #[Route("/api/posts/{id}", methods: ["GET"])] public function show(#[EntityId] int $id): Response { // 实现 } ?>
登录后复制
PSR-12 兼容性
- PHP CodeSniffer 配置:
- PHP-CS-Fixer 设置:
- IDE 集成:
- PhpStorm
- VS Code 配合 PHP Intelephense
常见问题和解决方案
- 混合行尾符:
可以使用以下命令检查和修复混合行尾符问题:
# 检查混合行尾符 find . -name "*.php" -exec file {} ; # 使用 dos2unix 修复 find . -name "*.php" -exec dos2unix {} ;
登录后复制
- 不正确的缩进: 确保使用一致的缩进 (例如,四个空格)。
下一步
下一篇文章将探讨 PSR-13,它定义了 PHP 中 HTTP 消息接口的标准。
资源
- 官方 PSR-12 规范
- PHP CodeSniffer PSR-12 规则集
- PHP-CS-Fixer 文档
示例:声明语句
<?php declare(strict_types=1); namespace VendorPackage; use VendorPackage{ClassA as A, ClassB, ClassC as C}; use VendorPackageSomeNamespaceClassD as D; ?>
登录后复制
示例:类结构
<?php namespace VendorPackage; class ClassName extends ParentClass implements ArrayAccess, Countable { private $property; public function __construct() { // 构造函数体 } } ?>
登录后复制
以上就是PHP中的PSR-扩展编码样式指南的详细内容,更多请关注php中文网其它相关文章!