Home >Backend Development >PHP Tutorial >PHP PSR-1 根本代码规范(中文版)

PHP PSR-1 根本代码规范(中文版)

WBOY
WBOYOriginal
2016-06-13 12:28:24873browse

PHP PSR-1 基本代码规范(中文版)

基本代码规范

本篇规范制定了代码基本元素的相关标准,
以确保共享的PHP代码间具有较高程度的技术互通性。

关键词 “必须”("MUST")、“一定不可/一定不能”("MUST NOT")、“需要”("REQUIRED")、
“将会”("SHALL")、“不会”("SHALL NOT")、“应该”("SHOULD")、“不该”("SHOULD NOT")、
“推荐”("RECOMMENDED")、“可以”("MAY")和”可选“("OPTIONAL")的详细描述可参见 RFC 2119 。

1. 概览

  • PHP代码文件必须<?php = 标签开始;

  • PHP代码文件必须不带BOM的 UTF-8 编码;

  • PHP代码中应该只定义类、函数、常量等声明,或其他会产生 从属效应 的操作(如:生成文件输出以及修改.ini配置文件等),二者只能选其一;

  • 命名空间以及类必须符合 PSR 的自动加载规范:PSR-0 或 PSR-4 中的一个;

  • 类的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范;

  • 类中的常量所有字母都必须大写,单词间用下划线分隔;

  • 方法名称必须符合 camelCase 式的小写开头驼峰命名规范。

2. 文件

2.1. PHP标签

PHP代码必须使用 <?php ?> 长标签 或 = ?> 短输出标签;
一定不可使用其它自定义标签。

2.2. 字符编码

PHP代码必须且只可使用不带BOM的UTF-8编码。

2.3. 从属效应(副作用)

一份PHP文件中应该要不就只定义新的声明,如类、函数或常量等不产生从属效应的操作,要不就只有会产生从属效应的逻辑操作,但不该同时具有两者。

“从属效应”(side effects)一词的意思是,仅仅通过包含文件,不直接声明类、
函数和常量等,而执行的逻辑操作。

“从属效应”包含却不仅限于:生成输出、直接的 requireinclude、连接外部服务、修改 ini 配置、抛出错误或异常、修改全局或静态变量、读或写文件等。

以下是一个反例,一份包含声明以及产生从属效应的代码:

<code class="php"><span class="hljs-preprocessor"><?php <span class="hljs-comment">// 从属效应:修改 ini 配置ini_set(<span class="hljs-string">'error_reporting', E_ALL);<span class="hljs-comment">// 从属效应:引入文件<span class="hljs-keyword">include <span class="hljs-string">"file.php";<span class="hljs-comment">// 从属效应:生成输出<span class="hljs-keyword">echo <span class="hljs-string">"\n";<span class="hljs-comment">// 声明函数<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">foo<span class="hljs-params">(){    <span class="hljs-comment">// 函数主体部分}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

下面是一个范例,一份只包含声明不产生从属效应的代码:

<code class="php"><span class="hljs-preprocessor"><?php <span class="hljs-comment">// 声明函数<span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">foo<span class="hljs-params">(){    <span class="hljs-comment">// 函数主体部分}<span class="hljs-comment">// 条件声明**不**属于从属效应<span class="hljs-keyword">if (! function_exists(<span class="hljs-string">'bar')) {    <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">bar<span class="hljs-params">()    {        <span class="hljs-comment">// 函数主体部分    }}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

3. 命名空间和类

命名空间以及类的命名必须遵循 PSR-0.

根据规范,每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendor name)。

类的命名必须 遵循 StudlyCaps 大写开头的驼峰命名规范。

PHP 5.3及以后版本的代码必须使用正式的命名空间。

例如:

<code class="php"><span class="hljs-preprocessor"><?php <span class="hljs-comment">// PHP 5.3及以后版本的写法<span class="hljs-keyword">namespace <span class="hljs-title">Vendor\<span class="hljs-title">Model;<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Foo{}</span></span></span></span></span></span></span></code>

5.2.x及之前的版本应该使用伪命名空间的写法,约定俗成使用顶级的组织名称(vendor name)如 Vendor_ 为类前缀。

<code class="php"><span class="hljs-preprocessor"><?php <span class="hljs-comment">// 5.2.x及之前版本的写法<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Vendor_Model_Foo{}</span></span></span></span></code>

4. 类的常量、属性和方法

此处的“类”指代所有的类、接口以及可复用代码块(traits)

4.1. 常量

类的常量中所有字母都必须大写,词间以下划线分隔。
参照以下代码:

<code class="php"><span class="hljs-preprocessor"><?php <span class="hljs-keyword">namespace <span class="hljs-title">Vendor\<span class="hljs-title">Model;<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Foo{    <span class="hljs-keyword">const VERSION = <span class="hljs-string">'1.0';    <span class="hljs-keyword">const DATE_APPROVED = <span class="hljs-string">'2012-06-01';}</span></span></span></span></span></span></span></span></span></span></code>

4.2. 属性

类的属性命名可以遵循 大写开头的驼峰式 ($StudlyCaps)、小写开头的驼峰式 ($camelCase) 又或者是 下划线分隔式 ($under_score),本规范不做强制要求,但无论遵循哪种命名方式,都应该在一定的范围内保持一致。这个范围可以是整个团队、整个包、整个类或整个方法。

4.3. 方法

方法名称必须符合 camelCase() 式的小写开头驼峰命名规范。


因psr-0已废弃故没有转

原文:PizzaLiu github

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn