PHP程序编码规范资料.docx

上传人:b****5 文档编号:7845477 上传时间:2023-01-26 格式:DOCX 页数:26 大小:30.57KB
下载 相关 举报
PHP程序编码规范资料.docx_第1页
第1页 / 共26页
PHP程序编码规范资料.docx_第2页
第2页 / 共26页
PHP程序编码规范资料.docx_第3页
第3页 / 共26页
PHP程序编码规范资料.docx_第4页
第4页 / 共26页
PHP程序编码规范资料.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

PHP程序编码规范资料.docx

《PHP程序编码规范资料.docx》由会员分享,可在线阅读,更多相关《PHP程序编码规范资料.docx(26页珍藏版)》请在冰豆网上搜索。

PHP程序编码规范资料.docx

PHP程序编码规范资料

PHP程序编码规范

Anyviolationtothisguideisallowedifitenhancesreadability.

所有的代码都要变成可供他人容易阅读的

良好的代码书写习惯+良好的注释习惯+PhpDocumentor=程序说明书

整理日期:

2014-05-06

参考修改自:

.NET编程规范

华为编程规范

JavaScript程序编码规范(cloudwater译)

PHP开发规范(未知出处)

PHPCodingStandard(FredrikKristiansen/DBMedialab)

等......

 

前言

第1章排版规则

1.1缩进

1.2空格规则

1.2.1逻辑运算符前后必须加空格

1.2.2多个参数分隔时必须加空格

1.2.3语法关键字后必须加空格

1.2.4字符串和变量连接规则

1.3换行

1.3.1较长的语句(>80字符)

第2章命名规范

2.1变量命名

2.1.1局部变量

2.1.2全局变量命名

2.1.3静态变量命名

2.1.4引用变量和函数返回引用

2.1.5临时变量命名

2.1.6方法中参数命名

2.2命名定义/全局常量

2.3类命名

2.3.1接口命名原则

2.3.2Exception命名原则

2.3.3类库命名

2.3.4方法命名

2.3.5方法/函数命名修饰

2.3.6类属性命名

2.3.7私有属性与私有方法命名

2.3.8对象命名

2.4缩写词不要全部使用大写字母

2.5函数命名

第3章版式规则

3.1语义分隔

3.2圆括号规则

PHP程序编码规范

3.3方法/函数

3.4关键字

3.4.1if语句

3.4.2for语句

3.4.4do语句

3.4.5switch语句

3.4.6try语句

3.4.7return语句

第4章编程规范

4.1数组定义规则

4.2不要采用缺省方法测试非零值

4.3通常避免嵌入式的赋值

4.4布尔逻辑类型

4.5别在对象架构函数中做实际的工作

4.6switch格式

4.7Continue和Break

4.8?

:

4.9其他杂项

4.9.1类定义文件中,定义体之外不得出现诸如echo、print等输出语句;

4.9.2在HTML网页中尽量不要穿插PHP代码

4.9.3没有含义的数字

4.9.4PHP文件扩展名

4.9.5总是将恒量放在等号/不等号的左边

4.10SQL规则

4.10.1输出网页的页面不出现SQL语句

4.10.2进行SQL执行的数据必须进行有效性检测

第5章注释规则

5.1一般规则

5.2方法/函数注释

5.3类注释

5.4记录所有的空语句

5.5用if(0)来注释外部代码块

5.6版权信息

 

第1章排版规则

1.1缩进

缩进对齐统一使用一种方式;只用4个空格或者只用TAB。

说明:

根据实际使用的环境来决定。

一些编辑器自动转换TAB为4个空格的距离,但有些也会转换为8

个空格。

块开头对齐赋值:

$book_name

='';//书名

$new_book_name

='';//新书名

$new_book_page_count=0;//新书页计数

说明:

一般在函数的开头把所有用到的内部变量都初始化一次,这样可以防止程序的未定义错误,并且

对函数内部变量有个直观的一览。

适用于定长字体。

1.2空格规则

空格应在以下情况时使用:

跟在((左括号)后面的关键字应被一个空格隔开。

while(true){

函数名与左括号之间不应该有空格。

这能帮助区分关键字和函数调用。

functionmyfun(){

所有的二元操作符,除了左括号和左方括号应用空格将其与操作数隔开。

一元操作符与其操作数之间不应有空格,除非操作符是个单词,比如typeof。

每个在控制部分,比如for语句中的;(分号)后须跟一个空格。

for($i=0;$i<10;$i++){

每个,(逗号)后应跟一个空格。

1.2.1逻辑运算符前后必须加空格

正确$a==$b;

正确$a++;$a––;

错误$a==$b;

$a==$b;

错误$a++;$a––;

备注:

加一减一运算符不能加空格。

1.2.2多个参数分隔时必须加空格

错误

$g_pro,$g_user,g_show;

$g_pro,$g_user,$g_show;

get_db_info($host,$user,$passwd);

get_db_info($host,$user,$passwd);

1.2.3语法关键字后必须加空格

if,for,while,switch等关键字...

例如:

正确for($i=0;$i<10;$i++)

错误for($i=0;$i<10;$i++)

1.2.4字符串和变量连接规则

字符串与变量连接使用'.'号时,必须在'.'前后加空格,使用”号自动转义变量时必须在变量前后加”{}”

正确$my_name='file_'.$var1;

错误$my_name='file_'.$var1;

正确

错误

$my_name="file_{$var1}";

$my_name="file_$var1";

正确$my_name=$_POST['name'];

错误$my_name=$_POST[name];

1.3换行

每行一个语句,除非这些语句有很密切的联系,否则每行只写一个语句。

用空行来将逻辑相关的代码

块分割开可以提高程序的可读性。

相对独立的程序块之间、变量说明之后必须加空行。

示例:

如下例子不符合规范。

if(!

valid_ni($ni)){

...//programcode

}

$repssn_ind=$ni;

应如下书写

if(!

valid_ni($ni)){

...//programcode

}

$repssn_ind=$ni;

1.3.1较长的语句(>80字符)

要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进

行适当的缩进,使排版整齐,语句可读。

示例:

if((taskno

&&(n7stat_stat_item_valid(stat_item))){

...//programcode

}

for(i=0,j=0;(i

&&(j

...//programcode

}

for(i=0,j=0;

(i

i++,j++){

...//programcode

}

第2章命名规范

2.1变量命名

规范使用三种书写方式:

Pascal命名规则

将标识符的每个单词的首字母都大写。

ps:

类命名与类的方法命名

例如:

BackColor

Camel命名规则

标识符的首字母小写,而后面连接的单词的首字母都大写。

ps:

方法内部变量命名,(函数外部参数命名)

例如:

backColor

LinuxC命名规则

变量所有字母都使用小写,使用'_'作为每个词的分界。

ps:

函数内部变量命名

变量名必须有一定的意义,并且意义准确。

例如:

有一个变量用于保存图书的数目,可以命名为number_of_book或者num_of_book。

不建议使

用i,j,n等,因为它没有意义。

也不建议使用number或book,因为意义不准确。

2.1.1局部变量

所有变量都要预先声明,并注明其意义,在函数的首部定义所有的变量。

不要使用一个声明一个;

最好把每个变量的声明语句单独放到一行,并加上注释说明。

所有变量按照字母排序。

$current_entry;//当前选择项

//缩进程度

$level;

$size;

//表格大小

尽量减少全局变量的使用。

不要让局部变量覆盖全局变量。

局部变量所有字母都使用小写,使用'_'作为每个词的分界。

实参并不认为是局部变量。

理由:

通过这一途径,代码中变量的作用域是清晰的。

所有的变量在代码中都看起来不同,容易辨认。

例如:

functionHandleError($errorNumber){

$error

=osErr($errorNumber);

$time_of_error

=osErr->GetTimeOfError();

$error_processor=osErr->GetErrorProcessor();

}

变量名字应该使用名词或者形容词+名词的方式。

如$value,$new_value。

2.1.2全局变量命名

全局变量使用g前缀。

例:

global$gLog;

global&$rgLog;

2.1.3静态变量命名

静态变量使用s前缀,如:

$s_value。

2.1.4引用变量和函数返回引用

引用必须带‘r’前缀

理由:

使得类型不同的变量容易辨认,它可以确定哪个方法返回可更改对象,哪个方法返回不可更改对象。

如:

$r_var。

function&rStatus(){};

ps:

关于用返回引用来加快运行速度一说,有文章指出并不明显。

2.1.5临时变量命名

不要将在循环中频繁使用的临时变量如$i,$j等用于其它用途。

2.1.6方法中参数命名

参数的名字使用Camel命名方法(首字母小写)

在首字符后的所有字都按照类命名规则首字符大写。

参数的名字应该是描述性的,参数的名字应该具有自描述性,也就是说参数的名称可以描述参数在大多数

情况下的含义,参数的类型也是可以从参数的名字推断出来的。

参数的名字是基于参数的含义而不是参数

的类型。

理由:

可以区分方法中的一般变量。

你可以使用与类名相似的名称而不至于产生重名冲突。

例如:

classNameOneTwo{

functionStartYourEngines(&$rSomeEngine,&$rAnotherEngine);

}

2.2命名定义/全局常量

全局常量所有字母都大写,用'_'分隔每个单词。

理由:

这是命名全局常量的传统。

你要注意不要与其它的定义相冲突。

例如:

define("HELLO_WORLD","Helloworld!

");

2.3类命名

用Pascal命名规则,也就是用英文的大小写来分隔单词,包括首个单词,所有单词的首字母大写,如

PageManager;

尽量谨慎的使用缩写,不要用下划线作类名单词连接符。

在类中,方法放到属性定义前边、公用方法放到专用方法前边。

在为类命名前首先要知道它是什么。

如果通过类名的提供的线索,你还是想不起这个类是什么的话,那

么你的设计就还做的不够好。

超过三个词组成的混合名是容易造成系统各个实体间的混淆,再看看你的设计,

尝试使用(CRCSession

card)看看该命名所对应的实体是否有着那么多的功用。

对于派生类的命名应该避免带其父类名的诱惑,

一个类的名字只与它自身有关,

和它的父类叫什么无关。

有时后缀名是有用的,例如:

如果你的系统使用了代理(agent)那么就把某个部件命名为,

“下载代理”

(DownloadAgent)用以真正的传送信息。

一般情况下,一个类对应到一个文件,当一些类关系紧密时,可以存放在一个文件中。

存放类的文件采

用classname.class.php方式命名。

所有系统文件名均为小写。

2.3.1接口命名原则

接口名字在类的原则上加前缀I。

例如:

IComponent(描述性名词)、ICustomAttributeProvider(名词短语)、IPersistable(形容词)

等。

有的类,必须用字母I作为类名前缀,而又不是一个接口。

这是可以接受的,因为有的类名就是I开头

的,例如:

IdentityStore。

这种情况和接口的区别在于其第二个字母是小写的。

有的时候,定义完一个接口之后,也会定义一个类作为接口的标准实现。

该类和该接口应该有类似的名

字,唯一的区别就是接口名称前缀为字母I。

如:

IComponent和它的标准实现classComponent{}。

2.3.2Exception命名原则

异常的命名以“Exception”为后缀。

2.3.3类库命名

目前命名空间正在越来越广泛的被采用,以避免不同厂商和团体类库间的类名冲突。

当尚未采用命名空间的时候,为了避免类名冲突,一般的做法是在类名前加上独特的前缀,两个字符就

可以了,当然多用一些会更好。

例如

JohnJohnson的数据结构类库可以用Jj做为前缀,如下:

classJjLinkList{}

另一种折中方式是建立包含类库目录

(事实上Java也是这么做的)以不通的目录代表不同的命名空间。

例如:

Microsoft的数据库相关类库可以在:

/classes/com/Microsoft/Database/DbConn.php

Apache的数据库相关类库可在:

/classes/org/apache/Database/DbConn.php

2.3.4方法命名

采用与类命名一致的规则

理由:

使用所有不同规则的大部分人发现这是最好的折衷办法。

ps:

这种方法和PHP并不像但是和java匹配,而又与js/C#类似,程序界够乱套的。

例如:

classNameOneTwo{

functionDoIt(){};

functionHandleError(){};

}

2.3.5方法/函数命名修饰

通常每个方法和函数都是执行一个动作的,所以对它们的命名应该清楚的说明它们是做什么的:

CheckForErrors()代替ErrorCheck(),用DumpDataToFile()代替DataFile()。

这么做也可以使功能和

数据成为更可区分的物体。

方法使用英文的大小写来分隔单词,命名建议使用动词+名词的方式,单词的首字母大写。

不要采用不常

用的缩写,如Where2Go();使用常用的缩写时,只大写首字母,如GetHtml()。

有时后缀名是有用的:

Max-含义为某实体所能赋予的最大值。

Cnt-一个运行中的计数变量的当前值。

Key-键值。

例如:

RetryMax表示最多重试次数,RetryCnt表示当前重试次数。

有时前缀名是有用的:

Is-含义为问一个关于某样事物的问题。

无论何时,当人们看到Is就会知道这是一个问题。

Get-含义为取得一个数值。

Set-含义为设定一个数值

r-小r前缀用于修饰返回引用的地方法与函数。

例如:

$IsHitRetryLimit。

function&rStatus(){};

functionDoSomething(&$rStatus){};

2.3.6类属性命名

使用英文名词、动词,以大写字母作为词的分隔,其他的字母均使用小写,单词的首个字母

使用大写,不使用下划线,对于类属性为某个对象变量,则以字符串Object为后缀,例:

classUserAccount{

$TableName

='';

$DatabaseObject='';

}

2.3.7私有属性与私有方法命名

以_开头,如private$_PrivateValue;

privatestatic$_sPrivateStaticValue;

privatefunction_Initialize(){...};

2.3.8对象命名

使用类名称为变量前缀,所有字母都使用大写,以字符串_obj为后缀,

例:

$input_obj=newInput;

ps:

经测试发现如果遇到比较长的类名的话精简变量名字是有必要的,

前提是一眼就能看出名字的意义,

变量过长的命名感觉导致书写困难,也影响程序可读性。

例:

$front_obj=JdFrontController:

:

getInstance();

2.4缩写词不要全部使用大写字母

无论如何,当遇到以下情况,你可以用首字母大写其余字母小写来代替全部使用大写字母的方法来表示

缩写词。

使用:

GetHtmlStatistic.

不使用:

GetHTMLStatistic.

理由:

当命名含有缩略词时,人们似乎有着非常不同的直觉。

统一规定是最好,这样一来,命名的含义就完全可以

预知了。

举个NetworkABCKey的例子,

注意C是应该是ABC里面的C还是key里面的C,

这个是很令人费解的。

有些人不在意这些,其他人却很讨厌这样。

所以你会在不同的代码里看到不同的规则,使得你不知道怎么

去叫它。

例如

classFluidOz//不要写成FluidOZ

classGetHtmlStatistic//不要写成GetHTMLStatistic

ps:

不过有时也要是情况而定,如PDO类库本身全大写,那么classMyPDOextendsPDO{...}也就

说得过去了,如果PDO小写有可能起反作用,主要目的在于容易理解,而不是做样子。

2.5函数命名

函数名字采用CGNU的惯例,所有的字母使用小写字母,使用'_'分割单词。

理由:

这样容易区分类方法?

ps:

此条有待研究,函数与方法区分微小,人为扩大区分不会起到反作用么?

调用的时候明显的->操作

方还不够清晰么?

例如:

functionsome_bloody_function(){}

完成一组功能的函数放到一个文件中,存放函数的文件采用name.func.php命名。

第3章版式规则

3.1语义分隔

各个函数、方法之间应该采用空行间隔;ps:

}结束大括号要有空行

同一个函数中联系紧密的语句之间可以不换行,其他情况需要换行。

3.2圆括号规则

函数名与括号之间不需要加空格、语法关键字后的括号必须加空格。

正确for($i=0;$i<10;$i++)

strlen($my_name);

错误for($i=0;$i<10;$i++)

strlen($my_name);

3.3方法/函数

函数名与((左括号)之间不应该有空格。

)(右括号)与开始程序体的{(左大括号)之间应插入一个空格。

函数程序体应缩进四个空格。

}(右大括号)与声明函数的那一行代码头部对齐。

functionouter($c,$d){

$e=$c*$d;

functioninner($a,$b,$e){

return($e*$a)+$b;

}

returninner(0,1,$e);

}

如果函数是匿名函数,则在function和((左括号)之间应有一个空格。

如果省略了空格,否则会让人感觉函

数名叫作function。

$a=function($e){

return$e;

};

3.4关键字

if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行

语句部分无论多少都要加括号{}。

示例:

如下例子不符合规范:

if(NULL==$rUserCR)return;

应如下书写:

if(NULL==$rUserCR){

return;

}

if这个规范是最容易出错的地方,不规范的写法在程序重构或修改的时候很容易造成疏忽。

3.4.1if语句

if语句应如以下格式:

if(condition){

statements;

}

if(condition){

statements;

}else{

statements;

}

if(condition){

statements;

}elseif(condition){

statements;

}else{

statements;

}

3.4.2for语句

for语句应如以下格式:

for(initialization;condition;update){

statements;

}

3.4.3while语句

while语句应如以下格式:

while(condition){

statements;

}

3.4.4do语句

do语句应如以下格式:

do{

statements;

}while(condition);

不像别的复合语句,do语句总是以;(分号)结尾。

3.4.5switch语句

switch语句应如以下格式:

switch(expression){

caseexpression:

statements;

default:

statements;

}

每个case与switch对齐。

这可避免过分缩进。

每一组statements(除了default应以break,return,或者throw结尾。

不要让它顺次往下执行。

3.4.6try语句

try语句应如以下格式:

try{

statements;

}catch(variable){

statements;

}

3.4.7return语句

一条有返回值的return语句不要使用()(括号)来括住返回值。

如果返回表达式,则表达式应与return关

键字在同一行,以避免误加分号错误。

第4章编程规范

系统统一使用时间戳time()作为时间标志,写入mysql时使用INT(10)类型写入,读取时可以使用公

共函数库中的getdate()将时间戳转换为标准时间格式;

引号统一使用'单引号,只有当引号重叠时才使用"双引号,这样每进程可以节省几百K内存;

统一使用

php?

>,禁止使用

?

>格式。

4.1数组定义规则

数组定义和使用时中key值前后必须加单引号。

//正确

array(

'name'

'gender'

);

=>'',

=>'php'

//错误

array(

=>'',

name

gender=>'php'

);

4.2不要采用缺省方

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1