设为首页 收藏本站
查看: 704|回复: 0

[经验分享] PHP的PSR系列规范都有啥内容

[复制链接]

尚未签到

发表于 2015-8-27 11:39:36 | 显示全部楼层 |阅读模式
PSR
  是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来有多的社区项目加入成员并遵循该标准。
  PHP-FIG — PHP Framework Interoperability Group, 是制定PSRs开发规范的组织,它的成员由很多知名PHP社区项目组成,在其官网首页下方可以看到成员清单。这些成员制定规范,并且落实在自己的项目中。
  其实各个PSR规范的内容都很简洁明了,比起那些动则几十页的规范,真是好太多了。
PSR-0(Autoloading Standard)
  PSR-0即类自动加载规范(原文:官网、GitHub)。从2014-10-21日起,该规范被标记为Deprecated,由PSR-4替代。它的内容十分简洁。
  内容:

  • 一个完全合格的命名空间和类名必须有以下的结构“\<Vendor Name>\(<Namespace>\)*<Class Name>”
  • 每个命名空间必须有顶级的命名空间(“Vendor Name”)
  • 每个命名空间可以有任意多个子命名空间
  • 每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR )
  • 每个“_”字符在“类名”中被转换为DIRECTORY_SEPARATOR 。“_”符号在命名空间中没有明确含义
  • 符合命名标准的命名空间和类名必须以“.php”结尾来加载文件
  • Vendor Name,命名空间,类名可以由大小写字母组成,其中命名空间和类名是大小写敏感的以保证多系统兼容性
PSR-1(Basic Coding Standard)
  PSR-1即基础编码标准(原文:官网、GitHub)。内容也是否简洁,包含了类文件、类名、类方法名的命名方法。
  内容:

  •   源文件必须只使用 <?php 和 <?= 这两种标签
  •   源文件中php代码的编码格式必须只使用不带BOM的UTF-8
  •   一个源文件建议只用来做声明(类,函数,常量等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置文件等),但不应该同时做这两件事
  •   命名空间和类必须遵守PSR-0标准
  •   类名必须使用StudlyCaps写法
  •   类中的常量必须只由大写字母和下划线(_)组成
  •   方法名必须使用cameCase写法
PSR-2(Coding Style Guide)
  PSR-2即编码风格标准(原文:官网、GitHub)。内容就稍多,但还是比较简洁,它以PSR-1为基础,包含了缩进、每行代码长度、换行、方法可见性声明、空格和方法体大括号换行的相关规定。
  标准内容:

  •   代码必须遵守 PSR-1
  •   代码必须使用4个空格来进行缩进,而不是用制表符
  •   一行代码的长度不应有硬限制;软限制必须为120个字符,建议每行代码80个字符或者更少
  •   在命名空间的声明下面必须有一行空行,并且在use的声明下面也必须有一行空行
  •   类的左花括号必须放到其声明下面自成一行,右花括号则必须放到类主体下面自成一行
  •   方法的左花括号必须放到其声明下面自成一行,右花括号则必须放到方法主体的下一行
  •   所有的属性和方法必须有可见性声明;abstract和final声明必须在可见性声明之前;而static声明必须在可见性声明之后
  •   在结构控制关键字的后面必须有一个空格;而方法和函数调用时后面不可有空格
  •   结构控制的左花括号必须跟其放在同一行,右花括号必须放在该结构控制代码主体的下一行
  •   控制结构的左括号之后不可有空格,右括号之前也不可有空格
PSR-3(Logger Interface)
  PSR-3是对应用日志类的通过接口的定义(原文:官网、GitHub)。内容很简单,就是一个接口,官方示例代码引用一下就好了。当然,在具体的应用中,只要遵循该接口,肯定可以定制相应的实现。
  基础内容:

  •   LoggerInterface暴露八个接口用来记录八个等级(debug, info, notice, warning, error, critical, alert, emergency)的日志。
  •   第 九个方法是log,接受日志等级作为第一个参数。用一个日志等级常量来调用这个方法必须和直接调用指定等级方法的结果一致。用一个本规范中未定义且不为具 体实现所知的日志等级来调用该方法必须抛出一个Psr\Log\InvalidArgumentException。不推荐使用自定义的日志等级,除非你 非常确定当前类库对其有所支持。
  
PSR-4(Improved Autoloading)
  PSR-4即改进版的自动加载规范(原文:官网、GitHub)。它是PSR-0规范的接替者。它可以与任何其它的自动加载规范兼容,包括PSR-0。
  内容:

  • 术语「类」是一个泛称;它包含类,接口,traits 以及其他类似的结构;
  • 完全限定类名应该类似如下范例:<NamespaceName>(<SubNamespaceNames>)*<ClassName>

    •   完全限定类名必须有一个顶级命名空间(Vendor Name)
    •   完全限定类名可以有多个子命名空间
    •   完全限定类名应该有一个终止类名
    •   下划线在完全限定类名中是没有特殊含义的
    •   字母在完全限定类名中可以是任何大小写的组合
    •   所有类名必须以大小写敏感的方式引用

  • 当从完全限定类名载入文件时:

    •   在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录
    •   在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配
    •   终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配

  •   自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值
  注:具体规范内容参考了其他中文翻译版本整理。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-104974-1-1.html 上篇帖子: 怎么才能成为一名PHP专家? 下篇帖子: 菜鸟学PHP之Smarty入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表