PHP推荐标准

PHP社区已从中心化的框架进化为分布式生态系统,分布式生态系统中组件效率高、互操作性好、作用单一。

PHP-FIG

PHP-FIG(PHP Framework Interop Group)由一些PHP框架代表组成,聚在一起“讨论项目之间的共性,寻找可以合作的方式”。他们的使命是实现框架的互操作性,通过接口、自动加载机制、标准风格,让框架相互合作。

PSR

PSR(PHP Standards Recommendation)是PHP推荐标准的简称,由PHP-FIG制定。规范名称以PSR-开头,后跟数字。PHP-FIG发布的推荐规范

  • PSR-1 基本的代码风格
  • PSR-2 严格的代理风格
  • PSR-3 日志记录器接口
  • PSR-4 自动加载

PSR-1 基本的代码风格

编写符合社区标准的PHP代码,必须满足以下要求

  • PHP 标签
    必须将PHP代码放在<?php ?><? ?>标签中,不得使用其他PHP标签句法。
  • 编码
    所有PHP文件必须使用 UTF-8 字符集编码,不能有字节顺序标记(BOM,Byte Order Mark)。
  • 目的
    一个PHP文件可定义符号,或执行有副作用的操作,但不能同时做这两件事。
  • 自动加载
    PHP命名空间和类必须遵守PSR-4自动加载标准,仅需为PHP符号选择合适的名称,并把定义符号的文件放在预期的位置。
  • 类的名称
    PHP类的名称必须采用大驼峰法(CamelCase),又叫标题式(TitleCase)。
  • 常量命名
    PHP常量的名称必须全部大写字母,若需要使用下划线分割单词。
  • 方法命名
    PHP方法名称必须使用小驼峰(camelCase)。

PSR-2 严格的代码风格

  • 贯彻PSR-1
    使用PSR-2代码风格钱必须贯彻PSR-1代码风格。
  • 缩进
    PHP代码使用4个空格缩进而非制表符缩进。
  • 文件和代码行
    PHP代码必须使用UNIX分割的换行符(LF),最后要有一个空行,而且不能使用PHP关闭标签 ?>
    每行代码不能超过80个字符,至少不能超过120个字符。
    每行末尾不能有空格。
  • 关键字
    PHP关键字必须使用小写字母
  • 命名空间
    每个命名空间声明语句后必须跟着一个空行

  • 类定义体的起始括号应该在类名之后新起一行写。
    类扩展或实现接口,extendsimplements关键字必须和类名写在同一行。
  • 方法
    方法定义体的起始括号要在方法名之后新起一行写,结束扩展要在方法定义体之后新起一行写。
    方法的参数起始圆括号之后没有空格,结束圆括号之前也没有空格。
    方法的每个参数,除最后一个后有一个逗号和空格。
  • 可见性
    类中的属性和方法均要声明可见性,可见性由publicprivateprotected指定,其作用是决定在类的内部和外部如何访问属性和方法。
  • 控制结构
    所有控制结构关键字后都要有一个空格,若控制结构关键字后有一对圆括号,起始圆括号后面不能有空格,结束圆括号之前不能有空格。
    与类和方法的定义体不同,控制结构关键字后面的起始括号应该和控制结构关键字写在同一行。
    控制结构关键字后面的结束括号必须单独写在一行。

PSR-3 日志记录器

推荐 monolog/monolog 组件( https://packagist.org/packages/monolog/monolog)。

Monolog 组件完全实现 PSR-3 接口,自定义消息格式化和处理程序扩展。

  • 可将消息写入文本、系统日志、数据库
  • 邮件发送
  • 支持 HipChat、Slack、网络服务器和远程API
<?php
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// 初始化日志记录器
$log = new Logger('app');
$log->pushHandler(new StreamHandler('logs/development.log'), Logger::DEBUG);
$log->pushHandler(new StreamHandler('logs/production'), Logger::WARNING);

// 使用日志记录器
$log->debug('This is a development debug message');
$log->warning('This is a production warning message');

PSR-4 自动加载器

自动加载器策略指在运行时按需查找PHP类、接口、形状,并将其载入PHP解释器。

符合此规范的组件包括:Symfony、Doctrine、Monolog、Twig、Guzzle、SwiftMailer、PHPUnit、Carbon...

PSR-4策略用于在运行时查找并加载PHP类、接口、形状,它不要求改变代码的实现方式,只建议如何使用文件系统目录结构和PHP命名空间组织代码。

PSR-4自动加载器策略依赖PHP命名空间和文件系统目录结构查找并加载PHP类、接口、形状。

PSR-4 精髓是把命名空间的前缀和文件系统中的目录对应起来,命名空间前缀可是顶层命名空间,也可是顶层命名空间加上任意子命名空间,相当灵活。

PSR-4 自动加载实现代码

<?php
// 使用SPL注册自动加载函数
spl_autoload_register(function($class){
  $prefix = 'App\\Foo';//项目命名空间前缀
  $basedir = __DIR__.'/src/';//项目命名空间对应的根目录

  //判断传入类是否使用命名空间前缀
  if( strncmp($prefix, $class, strlen($prefix))!==0 ){
    return;
  }

  // 类去除命名空间前缀后的类名
  $relative_class = substr($class, strlen($prefix));
  // 将命名空间转换为目录
  $filename = str_replace('\\', '/', $relative_class);
  
  // 判断文件是否存在并加载
  $file = $basedir.$filename.'.php';
  if(file_exists($file)){
    require $file;
  }
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是psr-0,psr-1,psr-2标准 FIG组织在制定跟PHP相关规范,简称PSR,PSR旨在通过讨论我们...
    meng_philip123阅读 5,731评论 0 2
  • 良好实践,这次主要挑了一些开发PHP应用时应该运用上的良好实践进行详细记录,特别是良好实践部分中密码和流两个点。关...
    BeckJiang阅读 6,389评论 6 41
  • PHP-FIG 1).即PHP Framework Interop Group。这个组织发布推荐的规范,而不是强制...
    萧潇在jianshu阅读 3,355评论 1 5
  • 整理自 PHP 标准规范 作为程序员来说,采用统一的编码风格是非常重要的。这将给未来代码的编写、阅读节省大量时间。...
    野尘lxw阅读 3,973评论 0 2
  • L九月份开学想学习轮滑,加入了轮滑协会的群,把管理员都加了一遍。 第一次和L说话,告诉L他会当L的师父,会努力把L...
    酒柚子阅读 1,873评论 1 1

友情链接更多精彩内容