PSR:PHP推荐标准

一:PSR产生的背景

        PHP组件和框架的数量很多,有各种各样的代码,但是有些旧的PHP代码是单独开发,不能与其他PHP框架共享代码,在2009年的php|tek(一个受欢迎的PHP会议)上,多位PHP框架的开发者认识并谈论到这个问题,如何改进框架内的通信?如何提升效率?随后他们组建了PHP Framework Interop Group (简称PHP-FIG)。

        PHP-FIG制定了推荐规范就是PSR,PHP框架可以自愿实现这些规范,改进与其他框架的通信和共享功能。


二:PSR推荐标准目的是什么?

        实现框架的互操作性。框架的互操作性,是指,通过接口、自动加载机制和标准的风格,让框架相互合作。


三:PSR是什么?

        PSR是PHP-FIG制定的推荐规范,这些规范的名称以PSR-开头,后面跟着一个数字。

PSR的作用是什么?用于解决大多数PHP框架经常会遇到的某个具体问题。PHP框架无需频繁解决相同的问题,它们可以遵守PHP-FIG制定的推荐规范,使用公用的方案来解决。

        最基础的四个推荐规范,这是官网全部的推荐规范: http://www.php-fig.org/psr/  

                ①PSR-1:基本的代码风格

                ②PSR-2:严格的代码风格

                ③PSR-3:日志记录器接口

                ④PSR-4:自动加载

        1:PSR-1:基本的代码风格

            A:PHP标签

                必须把PHP代码放在<?php ?> 或 <?= ?>标签中 

            B:编码

                所有PHP文件都必须使用UTF-8字符集编码,而且不能有字节顺序标记(Byte Order Mark,BOM)

            C:目的

                一个PHP文件可以定义符号(类、性状、函数和常量等),或者执行有副作用的操作(例如,生成结果或处理数据),但不能同时处理这两件事。

            D:自动加载

                PHP命名空间和类必须遵守PSR-4自动加载器标准

            E:类的名称

                PHP类的名称必须一直使用驼峰式:TitleCase

            F:常量的名称

                PHP常量的名称必须全部使用大写字母。如果需要,可以使用下划线把单词分开:GREAT_SCOTT

            G:方法的名称

                PHP方法的名称必须一直使用camelCase,方法名的首字母是小写,后续单词的首字母都是大写的

    2:PSR-2:严格的代码风格

            A:贯彻PSR-1

                使用PSR-2代码风格之前先贯彻PSR-1代码风格

            B:缩进

                PHP代码使用四个空格缩进

            C:文件和代码行

                PHP文件必须使用UNIX风格的换行符(LF),最后要有一个空行,而且不能使用PHP关闭标签。

                每行代码不能超过80个字符,至少不能超过120个字符。每行末尾不能有空格。

            D:关键字

                PHP关键字都使用小写字母:true、false、null

            E:命名空间

                每个命名空间声明语句后必须跟着一个空行。类似地,使用use关键字导入命名空间或为命名空间创建别名时,在

            一系列use声明语句后要加一个空行。

<?php
namespace My\Component

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class App
{
    //类的定义体
}

            F:类

                类定义体的结束括号必须定义在定义体之后新起一行写

<?php
namespace My\App;

class Adminstrator extends User
{
    //类的定义体
}

           G:方法

                方法定义提的括号位置和类定义体的括号位置一样

<?php
namespace Animals;

class Dog
{
    public function eatFood($food)
    {
        //方法的定义体
    }
}

            F:可见性

                类中的每个属性和方法都要声明可见性。可见性由public、protected、private指定,其作用是决定在类的内部和外部如何访问属性和方法

            H:控制结构

                所有控制结构关键字后面都要有一个空格。控制结构关键字包括:if、elseif、else、switch、case、while、do while、for、try和catch。如果控制结构关键字后面有一对圆括号,其实圆括号后面不能有空格,结束圆括号之前不能有空格。与类和方法的定义体不同,控制结构关键字后面的起始括号应该和控制结构关键字写在同一行。控制结构关键字后面的结束括号必须单独写在一行。

<?php
$gorilla = new \Animals\Gorilla;
$ibis = new \Animals\StrawNeckedIbis;

if ($gorilla->isAwake() === true) {
    do {
        $gorilla->beatChest();
    } while ($ibis->isAsleep() === true);
    
    $ibis->flyAway();
}


    3:PSR-3:日志记录器接口

            这个不是一系列指导方针,而是一个接口,规定PHP日志记录器组件可以实现的方法。

            注意:日志记录器是对象,用于把不同重要程度的消息写入制定的输出。记录的消息用于诊断、检查和排除应用中的操作、稳定性和性能方面的问题

            A:编写PSR-3日志记录器

                符合PSR-3推荐规范的PHP日志记录器组件,必须包含一个实现Psr\Log\LoggerInterface接口的PHP类。PSR-3接口复用了RFC 5424系统日志协议,规定实现九个方法。

            B:使用PSR-3日志记录器

                如果需要符合PSR-3规范的日志记录器,使用monolog/monolog即可。MonoLog组件完全实现了PSR-3接口,而且便于使用自定义的消息格式化程序和处理程序扩展功能。Monolog的消息处理程序可以把日志消息写入文本文件、系统日志和数据库,能通过电子邮件发送,还能传给HipChat、Slack、网络中的服务器和远程API。


    4:PSR-4:自动加载器

            描述了一个标准的自动加载器策略。自动加载器策略是指,在运行时按需查找PHP类、接口或性状,并将其载入PHP解释器。

            A:为什么自动加载器很重要?

                在PHP-FIG发布PSR-4推荐规范之前,PHP组件和框架的作者使用__autoload()和spl_autoload_register()函数注册自定义的自动加载器策略,可是每个PHP组件和框架都使用独特的自动加载器,而且每个自动加载器使用不同的逻辑查找并加载PHP类、接口和性状,索引用的话,必须调用每个组件各自的加载器。

            B:PSR-4自动加载器策略

                PSR-4推荐规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和PHP命名空间组织代码。

            

            推荐使用Composer自动生成的PSR-4自动加载器

白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论