本文目录导读:

在 PHP 中“遵循标准”主要包含两个层面:编码规范(写代码的格式)和架构规范(代码的组织方式)。
以下是 PHP 开发者最应该遵循的核心标准,从基础的编码规范到高级的设计模式:
编码规范(PSR 标准)
这是 PHP 社区最基础的标准,由 PHP-FIG(PHP Framework Interop Group)制定。你至少需要掌握 PSR-1 和 PSR-12。
-
PSR-1(基础编码标准):
- 文件必须使用
<?php或<?=- 文件必须使用 UTF-8 编码(无 BOM)。
- 一个文件要么只声明新符号(类、函数等),要么只执行有副作用的操作(如输出、修改配置),不要混在一起。
- 类名必须使用
StudlyCaps(大驼峰),如UserController。- 方法名必须使用
camelCase(小驼峰),如getUserName。- 类常量必须全部大写并用下划线分隔,如
MAX_LIMIT。
- 文件必须使用
-
PSR-3(日志接口):遵循统一的日志接口(如
Psr\Log\LoggerInterface),方便接入 Monolog 等日志库。 -
PSR-4(自动加载标准):这是日常开发中最常用的。
- 通过命名空间(Namespace)与文件路径对应,实现类的自动加载。
App\Models\User对应的路径就是src/Models/User.php(前提是App\指向src/),使用 Composer 可以自动生成vendor/autoload.php来处理这一切。
-
PSR-12(扩展编码风格指南):这是目前最推荐的代码风格。
- 缩进必须使用 4 个空格,不使用 Tab。
- 左花括号 必须写在下一行(类和方法声明),控制结构(if、for)的左花括号写在同行。
- 每行字符数尽量不超过 120 个,超过 80 个建议换行。
- 命名空间和
use声明必须在同一个空行之后。 - 所有属性和方法必须有可见性声明(
public、protected、private),禁止使用var。 - 控制结构关键词后必须有一个空格(如
if (condition))。
工具推荐:使用 PHP-CS-Fixer 或 PHP_CodeSniffer 来自动检查和修复代码风格,省时省力且专业。
架构与设计标准(SOLID 原则)
这是涉及面向对象设计(OOP)的重要准则,能让代码更易维护和扩展:
- 单一职责原则(SRP):一个类只负责一个业务逻辑,避免出现“上帝类”。
- 开闭原则(OCP):对扩展开放,对修改关闭,尽量通过增加新代码而不是修改旧代码来添加功能(多用接口和抽象类)。
- 里氏替换原则(LSP):子类必须能够替换其基类,且行为保持一致。
- 接口隔离原则(ISP):不强迫客户端依赖它们不使用的接口,设计小而精的接口,而非大而全的接口。
- 依赖倒置原则(DIP):依赖抽象(接口)而不依赖具体实现(类)。
现代 PHP 开发范式
在编写项目代码时,遵循以下范式能显著提升代码质量:
- 类型声明(Type Hinting):在函数参数和返回值上强制声明类型(
int、string、bool、array、类名),这在 PHP 7+ 是标配,能有效减少运行时错误。 - 严格类型(
declare(strict_types=1)):在文件顶部声明此指令,强制类型按严格模式匹配,避免 PHP 自动做宽松类型转换(如把"1"转为1)。 - 使用 Composer 管理依赖:不要手动下载库文件,通过
composer.json和composer.lock精确锁定依赖版本。 - 使用命名空间(Namespace):避免类名冲突,并配合 PSR-4 实现自动加载。
- 依赖注入(DI):不要在类内部使用
new来创建依赖对象(这会形成硬编码),而是通过构造函数或 Setter 传入依赖,配合容器(如 Laravel 的 Service Container)使用。
安全编码标准
遵循标准还包括写安全的代码,避免常见漏洞:
- 验证与过滤:对所有输入(
$_POST、$_GET)进行验证,对所有输出进行转义(htmlspecialchars())。 - SQL 注入防护:永远不要拼接 SQL 字符串,必须使用 PDO 预处理语句(Prepared Statements)。
- CSRF 防护:表单提交必须包含 CSRF Token。
- 文件上传:校验文件类型(使用
finfo_file而非仅看扩展名),并避免将文件保存到 Web 根目录下的可执行目录。
如何将这些标准落实到实际工作中?
如果你写的是原生 PHP,可以这样入手:
-
配置 Composer:在项目根目录运行
composer init。 -
设置目录结构:
project/ ├── public/ # Web 根目录(DocumentRoot) │ └── index.php # 唯一入口 ├── src/ # 业务代码(PSR-4 映射) │ ├── Controllers/ │ ├── Models/ │ └── Services/ ├── config/ # 配置文件 ├── vendor/ # 依赖库(由 Composer 自动生成) ├── composer.json └── .editorconfig # 编辑器统一风格配置 -
入口文件写法(public/index.php):
<?php declare(strict_types=1); require __DIR__ . '/../vendor/autoload.php'; // 定义错误处理常量(开发/生产环境切换) if (getenv('APP_ENV') === 'production') { error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT); } else { error_reporting(E_ALL); } // 这里是路由分发或框架入口 -
使用现代框架:如果你能熟练使用 Laravel 或 Symfony,它们会强制你遵循 PSR 标准和 MVC 架构,因为框架底层已经封装好了这些标准,写框架代码通常就是你实践和遵守标准的过程。
PHP 遵循标准,可以归纳为:
- 代码风格:用 PSR-12,配合 CS-Fixer 自动格式化。
- 自动加载:用 PSR-4,配合 Composer。
- 代码质量:遵循 SOLID 原则,使用类型声明和依赖注入。
- 安全:使用 PDO 预处理,转义输出,验证输入。
建议:从 composer 和 PSR-12 开始,这两者能立刻改变你的代码质量,如果是在团队中,建议在 pre-commit 钩子里加入 php-cs-fixer 检查,保证团队代码风格统一。