文档章节

FIG-PHP PSR规范系列1-基础编码规范

一配
 一配
发布于 2015/07/29 15:07
字数 1599
阅读 1190
收藏 7

1. FIG-PHP与PSR简介

    FIG-PHP制定了一系列PHP开发规范,简称PSR,这里FIG是框架互操作工作组(Framework Interoperability Group)的简称,PSR是PHP标准推荐(PHP Standard Recommendation)的缩写。FIG-PHP工作组最初是源于项目代表讨论两个项目之间的共性时,找出可以共事的方式。主要的受众是双方项目组,但PHP界的其他人也在观望。如果其他人愿意采用这里的规范,那么欢迎,但这并非工作组的目标。工作组中没人会告诉你如何来建造应用。

    截止到2015.07, PSR共有五个规范文档发布,分别是:

  • PSR-0 自动加载(2014.10.21被废弃,替代规范为PSR-4)

  • PSR-1 基础编码规范

  • PSR-2 编码风格

  • PSR-3 日志接口

  • PSR-4 改进的自动加载

  • PSR-7 HTTP消息接口


   下面将分多个系列来学习这些规范, 本文档是系列1。

2. PSR-1: 基础编码规范

   本规范讨论一些基础的代码规范,以便将来代码共享时不同代码之间能有更高程度的技术互操作。

   本规范中的必须(MUST),不可(MUST NOT),应当(SHOULD),不应当(SHOULD NOT),可以/可能(MAY)等关键词的含义可参见RFC 2119

2.1 概述

  • 源文件必须(MUST)只使用 <?php 和 <?= 这两种标签。

  • 源文件中php代码的编码格式必须(MUST)只使用不带字节顺序标记(BOM)的UTF-8。备注:更多BOM资料可参见参考资料[BOM]。

  • 一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些辅助作用的操作(例如:输出信息,修改.ini配置等),但不应当(SHOULD NOT)同时做这两件事。

  • 命名空间(namespace)和类(class) 必须遵循一种PSR自动加载规范: PSR-0或PSR-4。(译者注:由于PSR-0已经被废弃,因此这里事实上等同于必须遵循PSR-4规范。)

  • 类名(class name) 必须使用StudlyCaps写法。

    (译者注:参见参考资料[StudlyCaps], StudlyCaps是一种大小写字母可任意变化,其中一些字母可被忽略的一种写法。例如消息可能隐藏在大写字母与小写字母中,例如"ShoEboX"大写字母可拼出"SEX", 小写祖母可拼出"hobo", webmail服务商Hotmail最初被写为HoTMaiL, 大写字母可拼出HTML。)

  • 类(class)中的常量必须只由大写字母和下划线(_)组成。

  • 方法名(method name) 必须使用camelCase(驼峰式)写法。

2.2 文件

2.2.1 PHP标签

    PHP代码必须只使用长标签(<?php ?>)或者短输出式标签(<?=  ?>);而不可使用其他标签。

2.2.2 字符编码

   PHP代码的编码格式必须只使用不带字节顺序标记(BOM)的UTF-8。

2.2.3 辅助作用

    一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些辅助作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。

    短语 辅助作用(side effects)的意思是与声明(类(class),函数(function),常量(constant)等)没有直接关系的一些执行逻辑。

    (译者注:[PSR-1-翻译1]中将side effects翻译为副作用[PSR-1-翻译2]中翻译为从属效应 , 都感觉不知所云,这里翻译为辅助作用应当更好)。

    (译者注:原文中的merely from including the file没有弄清楚是什么意思,留待以后确认)。

  辅助作用包含但不局限于:产生输出,显式地使用require或include,连接外部服务,修改ini配置,触发错误或异常,修改全局或者静态变量,读取或修改文件等等

    下面是一个既包含声明又有辅助作用的示例文件;即应避免的例子:

<?php
// 辅助作用:修改了ini配置
ini_set('error_reporting', E_ALL);

// 辅助作用:载入了文件
include "file.php";

// 辅助作用:产生了输出
echo "<html>\n";

// 声明
function foo()
{
    // 函数体
}


下面是一个仅包含声明的示例文件;即应提倡的例子:

<?php
// 声明
function foo()
{
    // 函数体
}

// 条件式声明不算做是辅助作用
if (! function_exists('bar')) {
    function bar()
    {
        // 函数体
    }
}

2.3 空间名(namespace)和类名(class name)

    命名空间(namespace)和类(class)必须遵循一种自动加载规范PSR-0或PSR-4.

    这意味着一个源文件中只能有一个类(class),并且在命名空间中至少要有一级:即一个顶级的组织名(vendor name)。

   类名(class name) 必须使用StudlyCaps写法。

   PHP5.3之后的代码必须使用正式的命名空间(namespace) 

例子:

<?php
// PHP 5.3 及之后:
namespace Vendor\Model;

class Foo
{
}


PHP5.2.x之前的代码建议用伪命名空间Vendor_作为类名(class name)的前缀

<?php
// PHP 5.2.x 及之前:
class Vendor_Model_Foo
{
}


2.4 类的常量、属性和方法

    术语类(class)指所有的类(class),接口(interface)和trait。

2.4.1 常量

    类常量必须(MUST)只由大写字母和下划线(_)组成。 例子:

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

2.4.2 属性

    类的属性命名可以遵循$StulyCaps,$camelCase或者$under_score中的某一种风格,本规范不做强制要求,但无论遵循哪种命名方式,都应当(SHOULD)在一定的范围内保持一致。这个范围可以是整个团队、整个包、整个类或整个方法。

2.4.3 方法

    方法名必须(MUST)使用camelCase风格来声明。

3. 参考资料

[BOM] 一个bom头引发的血案, http://blog.csdn.net/ohmygirl/article/details/6931716

[PHP-FIG] php-fig, http://www.php-fig.org/

[PSR-1-翻译1] PSR-1基本代码规范, https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-1-basic-coding-standard.md

[PSR-1-翻译2] PHP PSR-1 基本代码规范(中文版), http://segmentfault.com/a/1190000002521577

[PSR-4] FIG-PHP PSR规范系列4-自动加载, http://my.oschina.net/1pei/blog/485099

[RFC2119] Key words for use in RFCs to Indicate Requirement Levels, March 1997, http://www.ietf.org/rfc/rfc2119.txt

[RFC2119-阮一峰] RFC2119:表示要求的动词, http://www.ruanyifeng.com/blog/2007/03/rfc2119.html

[StudlyCaps] Studly caps, https://en.wikipedia.org/wiki/Studly_caps

© 著作权归作者所有

一配
粉丝 35
博文 145
码字总数 113846
作品 0
西城
私信 提问
PHP编码规范(PSR)的简述

PSR简介 PSR是一系列关于PHP开发的规范,一般大家遵守的是 php-fig定义的规范,中文翻译版本参考目前官方已制定的规范包括以下六份文件: PSR-0 (弃用) PSR-1 (基本代码规范) PSR-2 (代码风格...

2688
2016/07/04
395
0
利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备

利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备 『Composer 一统天下的时代已经到来!』——白岩松 “一个时代结束了,另一个时代开始了。” Framework Interoperability Gro...

蜗牛奔跑
2016/10/15
56
0
利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备

“一个时代结束了,另一个时代开始了。” Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年。FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大...

peasant
2016/06/03
15
0
PHP编码规范(PSR-4)-Autoloader 自动加载

PSR-4 Autoloader 1. 概述 本 PSR 是关于由文件路径 自动载入 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类...

2688
2016/07/04
83
0
FIG-PHP PSR规范系列4-自动加载

PSR-4规范:自动加载 虽然在[PSR-4-Meta]中指出PSR-4是对PSR-0规范的补充而不是替换,但是在[PSR-0]中已经写到PSR-0于2014.10.21被废弃,并在[PSR-4-Meta]中详细写明了PSR-0的不足,已经不能...

一配
2015/07/29
4K
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins World 贡献者峰会及专家答疑展位

本文首发于:Jenkins 中文社区 原文链接 作者:Marky Jackson 译者:shunw Jenkins World 贡献者峰会及专家答疑展位 本文为 Jenkins World 贡献者峰会活动期间的记录 Jenkins 15周岁啦!Jen...

Jenkins中文社区
33分钟前
8
0
杂谈:面向微服务的体系结构评审中需要问的三个问题

面向微服务的体系结构如今风靡全球。这是因为更快的部署节奏和更低的成本是面向微服务的体系结构的基本承诺。 然而,对于大多数试水的公司来说,开发活动更多的是将现有的单块应用程序转换为...

liululee
48分钟前
7
0
OSChina 周二乱弹 —— 我等饭呢,你是不是来错食堂了?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 自行车丢了:给主编推荐首歌 《クリスマスの夜》- 岡村孝子 手机党少年们想听歌,请使劲儿戳(这里) @烽火燎原 :国庆快来,我需要长假! ...

小小编辑
今天
520
9
玩转 Springboot 2 之热部署(DevTools)

Devtools 介绍 SpringBoot 提供了热部署的功能,那啥是热部署累?SpringBoot官方是这样说的:只要类路径上的文件发生更改,就会自动重新启动应用程序。在IDE中工作时,这可能是一个有用的功能...

桌前明月
今天
6
0
CSS--列表

一、列表标识项 list-style-type none:去掉标识项 disc:默认实心圆 circle:空心圆 squire:矩形 二、列表项图片 list-style-img: 取值:url(路径) 三、列表项位置 list-style-position:...

wytao1995
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部