1. 概述

1.1. 文档主要内容

本文档是对PHP开发的规范性提供指导和建议

1.2. 目标

编码规范对于任何一个开发项目都是很重要的,尤其是多人协作的情况,良好的编码规范意味着代码高质量、较少bug,以及易于维护。

2. PHP文件格式要求

2.1. 一般要求

对于只包含PHP代码的文件,不允许使用PHP结束标签(”?>”),尽管PHP语法并不要求必须这么做,但去掉这个结束标签,可以避免尾部的空白字符意外输出,造成不必要的影响。

2.2. 缩排

缩进的时候使用4个空格,不要使用TAB字符,在ide中可以将tab替换开启。

2.3. 行最大字符数

每行不要超过80个字符,即,在实际开发过程中每行的代码尽量不要超过第80列这个边界,稍微超过也可以,PHP代码每行最大字符数是120。

3. 命名规范

3.1. 类的命名首字母大写驼峰法命名

类的名称只能包括字母和数字,但不推荐使用数字。下划线只能用于替换路径分隔符的情况,比如文件名”Zend/Db/Table.php”会映射到类的名称”Zend_Db_Table”。

类名使用首字母大写驼峰法命名,文件名需要和类名保持一致。

3.2. 接口类的命名

接口类的命名规则与其他类的命名规则类似(参看上节),只是最好必须以单词”Interface”结尾,举例如下:

Zend_Log_Adapter_Interface

Zend_Controller_Dispatcher_Interface

3.3.成员方法的命名(骆驼法)

各模型和控制器内的方法名只能包含字母和数字字符,不允许使用下划线,虽然允许使用数字,但并不提倡。

方法名必须以小写字母开始。如果方法名包含多个单词,那么除了第一个单词,其他单词的首字母都大写,这就是通常所称的骆驼法则(”studlyCaps”或”camelCaps”)。

为增强代码的可读性,允许命名一定程度的详细和冗长。

下面是一些合乎规范的方法命名的例子:

filterInput()

getElementById()

widgetFactory()

对于面向对象编程,对象的存取器总是以”get”或”set”为前缀;当使用设计模式时,比如singleton或工厂模式(factory),方法的命名通常会包含模式的名称,这样可增强代码可读性,并且能一目了然的知道采用了何种设计模式。

3.4通用函数与方法命名(小写字母下划线分割)

在master、core等通用工具类里的函数名和方法名使用小写字母下划线分割

3.5 变量命名(成员变量驼峰法,方法内局部变量以下划线分割)

变量名只能包含字母、数字字符、下划线,数字也是允许但不提倡的。

对于声明为private或protected的类成员变量,变量名必须以一个下划线开头,而声明为public的成员变量则不允许使用下划线。

成员变量命名与成员方法命名规则一致,变量命名必须以小写字母开始,而之后的单词,遵循首字母大写的骆驼法则(camelCaps)。

方法内局部变量命名全部使用小写字母,单词之间使用下划线分隔

为了增强可读性,变量命名同样需要一定程度的详细和冗长,并且要有实际意义。类似于$i、$n这样的变量命名,除了用于较少代码的循环语句,在其他情况下是不允许的。如果循环语句超过20行代码,那么用于循环的索引变量也应该使用有意义的名字。

3.6 常量命名

常量名允许使用字母和数字字符,与变量命名等不同的是,他也允许使用下划线,对数字的使用也没有限制。

常量的所有字母都必须大写。

4. 编码风格

4.1.PHP代码定界符

PHP代码定界符必须使用完整的标准的PHP定界标签:

<?php

?>

禁止使用短标签。

4.2 字符串书写风格

4.2.1 纯文字字符串

对于纯文字字符串(不包含变量替代),必须使用单引号包含:

$a = ‘Example String’;

4.2.2. 含有引号的字符串

对于包含有引号的纯文字字符串,允许使用双引号来包含,这种方式多用于SQL语句的书写:

$sql = “SELECT `id`, `name` from `people` WHERE `name`=’Fred’ OR `name`=’Susan'”;

上面的书写方法比使用转义符加引号更加清晰,可读性强。

4.2.3. 含有变量替代的字符串

尽量使用单引号进行字符串拼接

对于含有变量替代的字符串,以下两种方式都是允许的:

$greeting = “Hello $name, welcome back!”;

$greeting = “Hello {$name}, welcome back!”;

为了书写的连贯性,以下方式是不允许的:

$greeting = “Hello ${name}, welcome back!”;

4.2.4. 字符串连接

多个字符串可以使用点操作符(”.”)连接,但点操作符前后必须各有一个空格,目的是增强可读性。

$company = ‘Zend’ . ‘Technologies’;

当使用点操作符连接多个字符串时,可以把语句拆分成多行来增强可读性,对于这种情况,每个后续行应该使用空格填充,使点操作符刚好对齐在等号下面:

$sql = “SELECT `id`, `name` FROM `people` “

     . “WHERE `name` = ‘Susan’ “

     . “ORDER BY `name` ASC “;

4.3. 数组

4.3.1. 数字索引数组

数组的索引不允许使用负数。

索引数组可以使用任何非负整数开始,但并不提倡这么做,建议每个数组都应该使用索引0开始。

当使用array关键字定义索引数组时,每个逗号后面都应该跟随一个空格字符,目的是增强可读性:

$sampleArray = array(1, 2, 3, ‘Zend’, ‘Studio’);

使用array关键字定义索引数组的语句可以拆成多行,这种情况下每个后续行都应该使用空格填充头部,使每行以如下的形式保持对齐:

$sampleArray = array(1, 2, 3, ‘Zend’, ‘Studio’,

$a, $b, $c,

56.44, $d, 500);

当然,上述形式的数组对于日常的工作来说几乎不会出现,因为数组成员过于杂乱,以下是我们工作中会遇到的数组形式,可自行判断长度是否适合换行

$sampleArray = array($a, $b, $c, $d, $e, $f, $g, $h);

4.3.2. 关联数组

当使用array关键字定义关联数组时,建议把语句拆分成多行,对于这种情况,应该使用空格使每一行的键和值分别对齐:

$sampleArray = array(

‘firstKey’     => ‘firstValue’,

‘secondKey’  => ‘secondValue’

);

5.编码结构

5.1注释

在代码上方注释时使用//

在代码后方注释时使用#

在方法和类的上方注释时使用

/**

 *

 */

5.2尽量减少流程控制代码的作用域

所有在判断条件外的必用变量在方法开头定义,并在后面增加注释,如下

5.3

若可以在本行将判断逻辑结束,则不要让判断逻辑继续影响下一行,尽量将代码查分为代码块,每一块逻辑尽量独立,如下

可以修改为如下

其他格式优化扔在补充中,大家有好的格式优化建议可以随时沟通,确认可行后增加到文档中

发表评论

电子邮件地址不会被公开。 必填项已用*标注