Zend Framework的PHP编码规范【1】

1. 概述... 2

1.1. 文档主要内容... 2

1.2. 目标... 2

2. PHP文件格式要求... 2

2.1. 一般要求... 2

2.2. 缩排... 2

2.3. 行最大字符数... 2

2.4. 行结束符... 3

3. 命名规范... 3

3.1. 类的命名... 3

3.2. 接口类的命名... 4

3.3. 文件命名... 4

3.4. 函数与方法的命名... 4

3.5. 变量命名... 5

3.6. 常量命名... 5

4. 编码风格... 6

4.1. PHP代码定界符... 6

4.2 字符串书写风格... 6

4.3. 数组... 7

4.4. ... 8

4.5. 函数与方法... 9

4.6. 控制语句... 11

4.7. 内部文档化

1. 概述

1.1. 文档主要内容

本文档是对PHP开发的规范性提供指导和建议,主要内容包括:

l        PHP文件格式要求

l        命名规范

l        编码风格规范

l        代码内文档化要求

1.2. 目标

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

2. PHP文件格式要求

2.1. 一般要求

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

重要:虽然在PHP里可以通过 __HALT_COMPILER() 来包含任意的二进制数据,但在本规范里禁止这么做,只有在某些安装了特殊脚本的情况下才允许这么做。

2.2. 缩排

缩进的时候使用4SPACE字符(键),不要使用TAB字符(键)。

2.3. 行最大字符数

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

2.4. 行结束符

行结束符采用UNIX文本文件标准,即每行以“换行符(LF)”结束,在ASCII码中,换行符是的十进制值为10,十六进制值为0x0A

不要使用Macintosh系统的标准:以回车符(CR,十六进制值是0x0D)为行结束符。

也不要使用Windows系统的标准:以回车/换行(CRLF0x0D, 0x0A)为行结束符。

3. 命名规范

3.1. 类的命名

Zend Framework引入了一种层级类命名方法,可以通过类的名称直接映射到该文件实际存储的目录。在这个层级结构中,Zend Framework的根目录是"Zend/",所以的类文件都按一定目录层次分别保存。

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

如果类的名称由多个单词组成,那么每个单词的首字母都必须大写,其他字母小写,例如类名"Zend_PDF"是不允许的,应该命名为"Zend_Pdf"

Zend Framework中由Zend公司(或者参与Zend Framework开发的合作伙伴公司)发布的类,其名称总是以"Zend_"开头,其相应的文件保存在层级目录"Zend/"中。

规范的类命名的例子:

Zend_Db

Zend_View

Zend_View_Helper

重要: 在项目开发中不属于Zend框架的代码,例如由框架使用者自己开发代码,类的命名一定不要以"Zend_"开头,只有Zend公司(或参与Zend Framework开发的合作伙伴公司)发布的类,才能使用”Zend_”命名。

3.2. 接口类的命名

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

Zend_Log_Adapter_Interface

Zend_Controller_Dispatcher_Interface

3.3. 文件命名

对于所有文件,只有字母、数字、下划线和短划线("-")可以使用,不允许使用空格和其他特殊字符。

只要是包含有PHP代码的文件都必须以".php"为文件名后缀,下面是一些规范的文件命名的例子,这几个例子与上一节类命名的例子相对应。

Zend/Db.php

Zend/Controller/Front.php

Zend/View/Helper/FormRadio.php

正如上面的例子,文件命名与类命名必须一致。

3.4. 函数与方法的命名

函数名只能包含字母和数字字符,不允许使用下划线,虽然允许使用数字,但并不提倡。

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

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

下面是一些合乎规范的函数命名的例子:

filterInput()

getElementById()

widgetFactory()

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

本规范不允许有全局范围的函数(即游离于对象之外的函数),这些函数应该包装进一个静态类。

3.5. 变量命名

变量名只能包含字母和数字字符,不允许使用下划线(对于下面的情况例外),同样,数字也是允许但不提倡的。

对于声明为privateprotected的类成员变量,变量名必须以一个下划线开头,这也是变量命名规则中唯一允许使用下划线的情况,而声明为public的成员变量则不允许使用下划线。

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

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

3.6. 常量命名

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

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

常量必须使用const指示符定义为类成员,在全局范围使用define定义常量虽然允许,但也不提倡。

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);

4.3.2. 关联数组

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

$sampleArray = array('firstKey'  => 'firstValue',

                     'secondKey' => 'secondValue');

posted @ 2011-04-19 08:50  春哥也编程  阅读(2534)  评论(0编辑  收藏  举报