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;
  }
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容