本文共 1967 字,大约阅读时间需要 6 分钟。
PSR-0 已被 PSR-4 替代,以下是 PSR-4 的基本规范:
命名空间格式:
命名空间必须以顶级命名空间(Vendor Name)开始,后面可以有多个子命名空间。 格式为:\vendor\namespace\subnamespace\Class_Name
DIRECTORY_SEPARATOR(默认为 \)。_ 只是作为命名字符,并无特殊意义。命名空间结构:
DIRECTORY_SEPARATOR。类名规范:
.php 文件名称匹配,大小写敏感。自动加载器要求:
PSR-4 定义了完全限定类名的格式:
类名格式:
\namespace\subnamespace\Class_Name
命名空间结构要求:
类名要求:
.php 文件名称匹配。自动加载器要求:
| 完整类名 | 命名空间前缀 | 文件基目录 | 文件路径 |
|---|---|---|---|
| \Acme\Log\Writer\File_Writer | Acme\Log\Writer | ./acme-log-writer/lib/ | ./acme-log-writer/lib/File_Writer.php |
文件标签:
使用<?php 或 <?= 作为标签。 文件编码:
文件必须以 UTF-8 无 BOM 编码保存。文件内容:
命名规范:
StudlyCase(首字母大写)。camelCase(首字母小写)。PSR-2 已被 PSR-12 取代。
声明语句:
use 导入语句。declare(strict_types=1) 确保严格类型。代码格式:
LF 结束。代码结构:
命名空间结构:
use 语句导入复合命名空间时,避免过深层级。declare(strict_types=1);namespace Vendor\Package;use Vendor\Package\{ ClassA as A, ClassB, ClassC as C};use Vendor\Package\SomeNamespace\ClassD as D;use function Vendor\Package\{ functionA, functionB, functionC};use const Vendor\Package\{ ConstantA, ConstantB, ConstantC};class Foo extends Bar implements FooInterface{ public function sampleFunction(int $a, int $b = null): array { if ($a === $b) { bar(); } elseif ($a --> $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // 方法体 }} 以上规范是编写高质量 PHP 代码的重要指南,建议在开发过程中遵循这些标准。
转载地址:http://gwtfk.baihongyu.com/