这个规范原文如下:

1. Overview

  • Code MUST follow a "coding style guide" PSR [PSR-1].

  • Code MUST use 4 spaces for indenting, not tabs.

  • There MUST NOT be a hard limit on line length; the soft limit MUST be 120 characters; lines SHOULD be 80 characters or less.

  • There MUST be one blank line after the namespace declaration, and there MUST be one blank line after the block of use declarations.

  • Opening braces for classes MUST go on the next line, and closing braces MUST go on the next line after the body.

  • Opening braces for methods MUST go on the next line, and closing braces MUST go on the next line after the body.

  • Visibility MUST be declared on all properties and methods; abstract and finalMUST be declared before the visibility; static MUST be declared after the visibility.

  • Control structure keywords MUST have one space after them; method and function calls MUST NOT.

  • Opening braces for control structures MUST go on the same line, and closing braces MUST go on the next line after the body.

  • Opening parentheses for control structures MUST NOT have a space after them, and closing parentheses for control structures MUST NOT have a space before.

这一规范主要是约束代码风格的,可是说是所有里面最关键最重要的,也是需要好好规范和共同遵守的。

我们一个个来看下,只能我大略的写一些比较重要的,或者说平时用的最多的。

 

1. 源文件

  1. 文件末尾必须空一行。
  2. 必须使用Unix LF(换行)作为行结束符。
  3. 纯PHP代码源文件的关闭标签?>必须省略。

第3点其实是蛮重要的,我之前还老写闭合,现在不写了。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

 

2. 缩进

必须使用4个空格来缩进,不能使用Tab键。当然你如果把Tab在编辑器里手动设置为4个空格也可以。这样的目的是因为:每个人的机器上的Tab键都不一样,有些是4个空格,有些是8个空格,在你的机器上看着很爽的代码,在别人机器上了就各种恶心了。所以,统一搞成4个空格,不管在哪里打开都是美观的。

 

3. 行

一行推荐的是最多写80个字符,多于这个字符就应该换行了,一般的编辑器是可以设置的。

 

4. 关键字和 True/False/Null

php的关键字,必须小写,boolean值:true,false,null 也必须小写

下面是php的keyword,必须小写。

'__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'

 

5. 命名空间(Namespace)和导入(Use)声明

先简单文字描述下:

命名空间(namespace)的声明后面必须有一行空行。

所有的导入(use)声明必须放在命名空间(namespace)声明的下面。

一句声明中,必须只有一个导入(use)关键字。

在导入(use)声明代码块后面必须有一行空行。

用代码来说明下:

 

<?php

namespace Lib\Databases; //下面必须空格一行

class Mysql {

}

namespace下空一行,才能使用use,再空一行,才能声明class

 

<?php

namespace Lib\Databases; // 下面必须空格一行

use FooInterface; //use 必须在namespace 后面声明

use BarClass as Bar;

use OtherVendor\OtherPackage\BazClass; // 下面必须空格一行

class Mysql

{

}

 

6. 类(class),属性(property)和方法(method)

1 . 继承(extends) 和实现(implement) 必须和 class name 写在一行,切花括号要换行写。

 

<?php

namespace Lib\Databaes;

class Mysql extends ParentClass implements \PDO, \DB // 写一行

{ //换行写{

}

2 . 属性(property)必须声明其可见性,到底是 public 还是protected还是 private,不能省略,也不能使用var, var是php老版本中的什么方式,等用于public.

 

<?php

namespace Lib\Databaes;

class Mysql extends ParentClass implements \PDO, \DB // 写一行

{

public $foo = null;

private $name = 'yangyi';

protected $age = '17';

}

3 . 方法(method) ,必须 声明其可见性,到底是 public 还是protected还是 private,不能省略。并且,花括号{必须换行写。如果有多个参数,第一个参数后紧接, ,再加个空格,且函数name和( 之间必须要有个空格:function_name ($par, $par2, $pa3), 如果参数有默认值,也要用左右空格分开。

 

<?php

namespace Lib\Databaes;

class Mysql extends ParentClass implements \PDO, \DB // 写一行

{

public getInfo ($name, $age, $gender = 1) //函数名getInfo和(之间有个空格,参数之间也要有空格。默认参数也要左右都有空格

{ //必须换行写{

}

}

4 . 当用到抽象(abstract)和终结(final)来做类声明时,它们必须放在可见性声明 (public 还是protected还是private)的前面。而当用到静态(static)来做类声明时,则必须放在可见性声明的后面。

直接上代码:

 

<?php

namespace Vendor\Package;

abstract class ClassName

{

protected static $foo; //static放后面

abstract protected function zim(); //abstract放前面

final public static function bar() //final放前面,static放最后。

{

// 方法主体部分

}

}

 

7.控制结构

控制接口,就是if else while switch等。这一类的写法规范也是经常容易出现问题的,也要规范一下。

1 . if,elseif,else写法,直接上规范代码吧:

 

<?php

if ($expr1) { //左右空格

// if body

} elseif ($expr2) { //elesif 连着写

// elseif body

} else {

// else body;

}

2 . switchcase 注意左右空格和换行,还是直接上规范代码:

 

<?php

switch ($expr) { //左右空格

case 0:

echo 'First case, with a break'; //对其

break; //换行写break ,也对其。

case 1:

echo 'Second case, which falls through';

// no break

case 2:

case 3:

case 4:

echo 'Third case, return instead of break';

return;

default:

echo 'Default case';

break;

}

3 . whiledo while 的写法也是类似,要左右空格,上代码:

 

<?php

while ($expr) { //左右空格

// structure body

}

do {

// structure body; //左右空格

} while ($expr);

4 . for的写法

 

<?php

for ($i = 0; $i < 10; $i++) { //注意几个参数之间的空格

// for body

}

5 . foreach的写法

 

<?php

foreach ($iterable as $key => $value) { //还是空格问题

// foreach body

}

6 . try catch的写法

 

<?php

try {

    // try body

} catch (FirstExceptionType $e) { //同样也是注意空格。

    // catch body

} catch (OtherExceptionType $e) {

    // catch body

}

基本用到的就是这些了,其他什么闭包啥的用的不多就不过多的累述了。

第13篇 PSR-2代码样式的更多相关文章

  1. ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

    本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...

  2. idea 插件推荐 & 代码样式安装

    部分链接打不开的可能需要梯子, 部分插件我懒得截图了,麻烦 ---------------------------------------header------------------------- ...

  3. android studio 导入主题设置,代码风格(附带eclipse 主题代码样式)

    在这里我最想说的,android studio默认主题样式,太low.不适合长时间写代码,看代码颜色不好识别,相对于背景的代码样式,我都不想吐槽了.还是网上下载主题代码样式导入样式.在这里我推荐 Su ...

  4. PHP团队 编码规范 & 代码样式风格规范

    一.基本约定 1.源文件 (1).纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> : (2).源文件中PHP代码的编码格式必须是无BOM的UTF-8格式: (3).使用 U ...

  5. Bootstrap列表与代码样式(附源码)--Bootstrap

    给大家分享下Bootstrap框架中列表与代码样式相关的知识 1.列表 (1)无序列表 <ul> <li>CN217编程</li> </ul> 注意:u ...

  6. PEP 8 - Python代码样式指南

    PEP 8 - Python代码样式指南 PEP: 8 标题: Python代码风格指南 作者: Guido van Rossum <python.org上的guido>,Barry Wa ...

  7. 几篇QEMU/KVM代码分析文章

    QEMU/KVM结合起来分析的几篇文章,代码跟最新的版本有些差异,但大体逻辑一样,写得通俗易懂.我把链接放这里主要是为自己需要查看时调转过去方便,感谢作者的付出! QEMU Source Code S ...

  8. 包教包会之Open Live Writer设置代码样式

    Open Live Writer(以下简称OLW),作为一个在本地写博文,然后发布到各个博客网站的客户端,在使用上个人觉得还是比较好用的.但是其对IT博文中代码部分的内容样式支持不是很友好.下面是本人 ...

  9. Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防

    这是Mysql系列第13篇. 环境:mysql5.7.25,cmd命令中进行演示. 当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? ...

  10. 019 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 13 数据类型转换的代码示例

    019 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 13 数据类型转换的代码示例 本文知识点:Java中的数据类型转换案例 学习视频有误,导致没法写文,文章内容 ...

随机推荐

  1. Linux下同时复制多个文件

    方法一 使用cp命令 cp /home/usr/dir/{file1,file2,file3,file4} /home/usr/destination/ 需要注意的是这几个文件之间不要有空格 具有共同 ...

  2. Effective C++ 条款02:尽量以const,enum,inline替换 #define

    换一种说法就是宁可以编译器替换预处理器 举例 #define ASPECT_RATIO 1.653 记号ASPECT_RATIO也许从未被编译器看见:也许在编译起开始处理源码前它就被预处理器移走了,于 ...

  3. Hive-开启动态分区

    开启动态分区 --开启动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict ...

  4. T-SQL RIGHT JOIN

    RIGHT JOIN外联接与LEFT JOIN相似.取得右表所有记录,并按过滤条件ON去取得左表的记录,取得这些记录,如遇上没有匹配的列使用NULL填充. 演示数据来源,两张表来自http://www ...

  5. LeetCode第[55]题(Java):Jump Game

    题目:跳跳游戏 难度:Medium 题目内容: Given an array of non-negative integers, you are initially positioned at the ...

  6. python脚本1_给一个半径求圆的面积和周长

    #给一个半径,求圆的面积和周长,圆周率3.14 r = int(input('r=')) print('area='+str(3.14*r*r)) print('circumference='+str ...

  7. base64编码的 文件 图片

    //图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlg = ne ...

  8. 【zzulioj-2115】乘积最大(区间dp)

    题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  9. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/xiaozao_web]]

    二月 20, 2017 11:30:28 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRul ...

  10. [JS学习笔记]浅谈Javascript事件模型

    DOM0级事件模型 element.on[type] = function(){} 兼容性:全部支持   lay1 lay2 lay3 e.target:直接触发事件的元素[IE8及以下不支持tage ...