php PSR规范
4. 命名空间与
发布日期:2025-05-02 07:09:19
浏览次数:9
分类:精选文章
本文共 2725 字,大约阅读时间需要 9 分钟。
PHP PSR 规范解析
PHP 开发规范(PHP Standards Recommendation, PSR)是 PHP 开源社区为改进代码质量和可维护性所提出的一系列标准。自 2011 年 PSR-1 的发布以来,已经发布了五个规范,涵盖了从代码风格到日志记录接口的多个方面。以下是对这些规范的详细解析。
PSR-1:PHP 标签与编码风格
PSR-1 是 PSR 的第一份规范,它规定了代码的基本编码风格和文件结构。
1. PHP 标签
- 要求:所有 PHP 代码必须放在
<?php>或<?=标签中。 - 注意事项:关闭标签必须确保没有意外输出。如果使用关闭标签,后面不能有空行。
2. 编码
- 要求:文件必须使用 UTF-8 编码。
3. 代码结构
- 要求:文件可以定义类、函数或常量,或者执行唯一副作用的操作(如输出或数据处理)。建议将定义和操作分开,通过
include或require导入外部文件。 - 示例(不符合规范):
\n);// 声明function foo(){ // function body} - 示例(符合规范):
4. 命名空间与类
- 要求:命名空间和类必须遵循 PSR-4 自动加载标准。
- 类名:类名必须使用驼峰命名法(如
ClassName),并在顶级命名空间下。PHP 5.3 及以上使用命名空间,格式如namespace Vendor\Model;。PHP 5.3以下使用伪命名空间,如class Vendor_Model_Foo{}。
5. 常量
- 要求:常量必须全大写,使用下划线分隔,例如
const VERSION = '1.0';。
6. 类方法
- 要求:方法名使用小写开头的驼峰命名法(如
fooBarBaz())。
PSR-2:更严格的代码风格
PSR-2 是对 PSR-1 的扩展,增加了更多代码风格上的要求。
1. 文件与代码行
- 要求:文件必须使用 Unix 风格换行符(LF),最后一行不能有空行。关闭标签不能使用
?>,以避免空行输出。 - 代码行长度:每行代码不超过 80 个字符,每行末尾不能有空格。
2. 缩进
- 要求:必须使用 4 个空格缩进,不能使用制表符(Tab)。
3. 关键字
- 要求:PHP 关键字必须小写,
true,false,null也必须小写。
4. 命名空间与 use 声明
- 要求:命名空间声明后必须有空行,
use声明放在命名空间后,且每个use后有空行。例如:namespace Vendor\Package;use FooClass;use BarClass as Bar;use OtherVendor\OtherPackage\BazClass;
5. 类继承与实现
- 要求:
extends和implements必须与类名在同一行。类定义体的括号在类名后新起一行,结束括号也必须单独一行。例如:namespace Vendor\Package;class ClassName extends ParentClass implements \ArrayAccess, \Countable { // constants, properties, methods}
6. 可见性
- 要求:属性和方法必须声明可见性,使用
public,private, 或protected。不能使用var关键字。
7. 方法与函数调用
- 要求:方法名后不能有空格,参数的起始括号后有空格,结束括号前也有空格。多参数时,每个参数逗号后有空格。
PSR-3:日志记录器接口
PSR-3 规范了一个通用的日志记录器接口(Psr\Log\LoggerInterface),要求框架实现该接口以支持第三方兼容。
1. 接口定义
- 方法:包含 9 个日志级别方法,每个方法接受
$message和$context两个参数。例如:interface LoggerInterface { public function emergency($message, array $context = array()); public function alert($message, array $context = array()); // 其他方法...}
2. 消息与上下文
- 消息:必须是字符串或实现
__toString()的对象,支持占位符(如{placeholder_name})。 - 上下文:是一个数组,用于替换占位符。
Exception对象必须放在exception键。
3. 实现示例
use Monolog\Logger;use Monolog\Handler\StreamHandler;$log = new Logger('myApp');$log->pushHandler(new StreamHandler('logs/development.log', Logger::DEBUG));$log->warning("This is a warning message"); PSR-4:自动加载器策略
PSR-4 规范了自动加载类、接口和 Traits 的标准,通过文件系统目录结构和命名空间查找类。
1. 自动加载器实现
spl_autoload_register(function ($class) { $prefix = 'Foo\\Bar\\'; $base_dir = __DIR__ . '/src/'; $len = strlen($prefix); if (strncmp($class, $prefix, $len) !== 0) { return; } $relative_class = substr($class, $len); $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php'; if (file_exists($file)) { require $file; }}); PSR-5:代码分析工具
虽然用户未详细说明 PSR-5,但其主要目的是为代码分析工具提供标准化的输出格式。
1. 规范内容
- 代码分析工具必须报告代码质量、复杂度、安全问题等。
- 输出格式标准化,便于工具解析和比较。
通过遵循 PSR 规范,开发者可以编写更规范、更易维护的 PHP 代码,从而提升代码质量和团队协作效率。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2026年05月23日 08时30分03秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php微信 开发笔记,微信WebApp开发总结笔记
2023-03-01
php微信公众号开发access_token获取
2023-03-01
php微信公众号开发微信认证开发者
2023-03-01
php微信公众号开发用户基本信息
2023-03-01
php怎么将对象变成数组,php怎么将对象转换成数组
2023-03-01
RabbitMQ - 消息堆积问题的最佳解决方案?惰性队列
2023-03-01
php怎样比较两数大小,jquery如何判断两个数值的大小
2023-03-01
PHP性能监控 - 开启xhprof(一)
2023-03-01
PHP性能监控 - 怎么看xhprof报告(二)
2023-03-01
php截取字符串代码,PHP字符串截取_php
2023-03-01
php截取字符串,无乱码
2023-03-01
php手冊,php手冊之變量范圍
2023-03-01
PHP手机号码归属地查询API接口
2023-03-01
PHP执行耗时脚本实时输出内容
2023-03-01
PHP扩展安装
2023-03-01
PHP扩展数据库连接参数说明详解
2023-03-01
php把get参数放入数组_php怎么将数组转为url参数?
2023-03-01
PHP投票小程序
2023-03-01
php拆分数组不改变key值
2023-03-01