网站开发编码规范 v2Word格式.docx

上传人:b****6 文档编号:19699878 上传时间:2023-01-08 格式:DOCX 页数:29 大小:38.44KB
下载 相关 举报
网站开发编码规范 v2Word格式.docx_第1页
第1页 / 共29页
网站开发编码规范 v2Word格式.docx_第2页
第2页 / 共29页
网站开发编码规范 v2Word格式.docx_第3页
第3页 / 共29页
网站开发编码规范 v2Word格式.docx_第4页
第4页 / 共29页
网站开发编码规范 v2Word格式.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

网站开发编码规范 v2Word格式.docx

《网站开发编码规范 v2Word格式.docx》由会员分享,可在线阅读,更多相关《网站开发编码规范 v2Word格式.docx(29页珍藏版)》请在冰豆网上搜索。

网站开发编码规范 v2Word格式.docx

6.3注释15

6.4类型比较16

6.5递增/递减运算符16

6.6三元条件运算符17

6.7未初始化的变量17

6.8变量/数组是否为空的检测18

6.9正则表达式18

6.10使用file_get_contents/file_put_contents19

6.11Global/Request/Session/Server变量19

6.12输出header()20

6.13上传文件类型20

6.14字符串的大小写转换20

6.15PHP标签20

6.16程序文件末尾21

6.17magic_quotes_gpc21

6.18包含文件21

6.19遍历数组21

6.20避免修改for循环内的条件值21

6.21用常量代替函数22

6.22不信任intval()22

6.23目录权限22

6.24临时文件23

6.25静态方法和静态调用23

6.26时间问题23

6.27绝对路径23

6.28错误信息23

7AIPLIB公共库目录结构(根据项目不同分别制订)24

PHP代码规范

本文约定了在公司所有项目中均须遵守的代码规范标准,除特殊原因外所有新开发的程序须遵守此标准。

如果在程序中使用了PEAR的代码或者PECL的扩展函数库,请不要修改其源代码,除非绝对必要(需要另行撰写说明文档注明)。

1编辑器设置

1.1使用Tab缩进,不要使用空格

鉴于很多编辑器在保存文件时会自动清除用于缩进的空格,所以我们一律使用Tab键进行缩进。

1.2UNIX文件格式

请将编辑器设置对所有程序使用UNIX格式保存,不要使用Win32或者Mac的格式。

例如,EditPlus里面Document->

FileFormat(CR/LF)->

Unix。

对于windows格式文件,以Ctrl+M结束(vim下为^M),需要过滤掉:

$text=strtr($text,"

\x0D"

"

"

);

文件名统一用小写。

2命名约定

2.1公共库名称空间

ALPLIB,AILIPHPLibrary

2.2常量名

全局常量,用'

_'

分隔每个单词,使用TPLIB_前缀。

如:

define("

AIPLIB_TEST_HELLO"

Helloworld!

类常量,用'

分隔每个单词,如:

classAIPLIB_Package

{

constEXAMPLE_CONST;

}

尽量使用类常量代替全局常量。

每个项目内部不要使用外部全局常量。

2.3变量名

局部变量的字母使用驼峰式命名,首字母小写。

$engineName

适用于模板变量和JS内的变量命名。

函数、方法的参数,使用骆驼命名法命名,首字母为小写。

functiontest_func($paramName)

类属性,使用骆驼命名法命名,与函数、方法的参数命名方法相同;

全局变量,字母都使用大写,使用“_”作为每个词的分界,公共库中无特殊需求不使用全局变量。

尽量不要使用全局变量。

命名必须具有描述性,但务求简练。

不要在变量名中使用长句。

通常在变量名中使用一对词语(驼峰式)对变量进行简要描述这种方式更好。

2.4循环索引变量

在循环结构中,仅允许使用一个字母长度的循环索引变量。

通常我们使用$i,如果存在嵌套循环,那么子循环的索引变量应该使用$j,其下级循环的索引变量就是$k,以此类推。

如果循环被原已存在一些有具体含义名称的变量索引,则不受此规定约束。

例如:

for($i=0;

$i<

$outer_size;

$i++)

for($j=0;

$j<

$inner_size;

$j++)

{

foo($i,$j);

}

2.5类的方法命名

使用骆驼命名法命名,例如getCache()、echoName()。

名字采用“动词+宾语”的形式。

例如write(动词)Cache(宾语)。

2.6函数命名

函数应该使用描述性词语命名。

我们不使用C的方式,也不使用类似"

stristr()"

这种没有描述、令人费解的函数名。

所有函数名必须全部使用英文小写字母,函数名中的单词之间使用下划线间隔。

某些情况下,函数名中更适合使用动词。

print_login_status(),get_user_data(),等等。

一个基本的哲学观点,就是不要仅仅出于懒惰而去破坏代码的清晰。

比如print_login_status_for_a_given_user()太长,换成print_user_login_status()会更好,或者仅仅用print_login_status()。

2.7函数自变量

自变量的命名应遵守变量命名规定。

我们不想使用do_stuff($a,$b,$c)中的$a,$b,$c这种缺乏实际表述意义的名称。

多数情况下,我们希望能够仅仅通过查看函数的声明就可以了解如何去使用函数。

2.8名称空间与类命名

使用帕斯卡命名方法,如HelloWorld。

由于PHP5.3版本之前没有实现命名空间语法,这给类命名带来了一定的麻烦。

这里使用类名中附带名称空间的命名方法,名称空间与类名间使用下划线连接。

如AIPLIB库中Test包的HelloWorld类:

AIPLIB_Test_HelloWorld

所有库中的类,都以AIPLIB_开头,根据用途命名。

将类名字中的“_”替换为目录分隔符,就是这个类的定义文件所在位置。

这种命名规则和目录结构可以避免命名冲突,根据类名字就能找到文件存放位置。

AIPLIB_Test_HelloWorld类在库中的位置为

aiplib/test/helloworld.php(文件名小写)

Admin_Test_HelloWorld类在库中的位置为

admin_proj/test/helloworld.php(文件名小写)

admin_proj/test/Helloworld.php(错误)

2.9文件命名

包含文件应该以.inc.php方式命名,例如config.inc.php。

单独类的文件使用classname.php方式命名,包中的类使用packagename/className.php命名。

文件名全小写。

3代码层

3.1使用大括号

在语言结构(if,else,while,switch,for,foreach)中请在陈述与执行的代码分行,执行的代码放到大括号中,大括号不可省略。

/*错误的写法.*/

if(condition)do_stuff();

if(condition)

do_stuff();

while(condition)

$i<

size;

$i++)

do_stuff($i);

/*正确的写法.*/

if(condition){

do_stuff();

while(condition){

$i++){

3.2大括号的位置

在语言结构(if,else,while,switch,for,foreach)中和类(class)、函数(function)、方法(method)中,左大括号跟在声明结尾、右大括号必须单独占一行,与其声明处在相同的缩进级别。

例如:

if(condition){

while(condition2){

...

}else{

while(condition2)

else

$size;

$i++){

while(condition){

while(condition)

switch(condition){

case:

1

default:

switch(condition)

functiondo_stuff(){

classsome_class{

functiona_method(){

3.3数组格式

对于数组的定义,可以使用分行表述每个"

key=>

value,"

,每行开头使用一个Tab进行缩进。

右括号和该array(的起始行保持对齐。

$arr=array(

'

key1'

=>

value1'

index1'

value2'

3.4在运算符之间使用空格

在比较运算符(>

、<

、>

=、<

=、==、===、!

>

、!

==)、赋值运算符(=)、数学运算符(+、-、*、/、%)、位运算符(&

、|、^、~、>

<

)、逻辑运算符(!

、&

&

、||)、冒号(:

)、问号(?

)、字符串连接运算符(.)、字符串连接赋值运算符(.=)前后,以及左括号(()前(函数调用例外)、逗号(,)后请使用空格进行间隔。

$i=0;

$i=0;

if($i<

7)...

if($i<

7)...

if(($i<

7)&

($j>

8))...

if(($i<

7)&

($j>

8))...

do_stuff($i,"

foo"

$b);

do_stuff($i,"

$b);

for($i=0;

$i<

$size;

$i++)...

$i++)...

$i=($j<

$size)?

0:

1;

/*正确的写法g.*/

$i=($j<

$size) 

?

:

1;

3.5运算符优先级

对于容易引起迷惑的表达式中不同运算符的优先级,请使用括号来区分优先级。

/*what'

stheresult?

whoknows.*/

$bool=($i<

7&

$j>

8||$k==4);

/*nowyoucanbecertainwhatI'

mdoinghere.*/

$bool=(($i<

(($j<

8)||($k==4)))

3.6条件语句

请在条件陈述中使用&

和||,不要使用and和or。

7)and($j>

多重if...elseif...else最好换用选择结构体(switch...case)。

3.7语法结构

在PHP中echo、exit(die)、return、continue、break、include、include_once、require、require_once等都属于语法结构,大部分语法结构都有两种形式:

echo'

Thisisastring'

;

正确

echo('

不建议

在PHP规定的允许使用的格式下,尽可能使用前一种语法结构的格式,而不要使用函数参数/表达式的形式,仅在参数包含表达式时才需要用括号将其括起来。

当返回一个变量时通常不用括号,也建议不要用,这样既可以降低PHP的负担,又可以避免一些错误(见下)。

注意:

exit(die)只能使用括号结构

对于return(),当用引用返回值时永远不要使用括号,只能通过引用返回变量,而不是语句的结果。

如果使用return($a);

时其实不是返回一个变量,而是表达式($a)的值(当然,此时该值也正是$a的值)。

//won'

twork,evaluatedasinclude(('

vars.php'

)=='

OK'

),i.e.include('

'

if(include('

echo'

//works

if((include'

由于echo()是语法结构、没有返回值,所以速度比print()快。

在输出多个字符串时,请使用echo的多参数方式(逗号,间隔),会比字符串连接方式(点.间隔)有更好的性能。

3.8类

必须使用PHP5的__construct()和__destruct()方式,禁止使用PHP4的用与类同名函数的方式构造。

避免使用魔术方法__get,__set,__autoload。

在类里面多加函数不会影响性能。

子类的方法比基类执行得更快。

执行一个拥有一个参数和空函数体的函数相当于7-8次局部变量自增操作$localvar++,一个相似的方法调用当然就相当于15次局部变量自增操作$localvar++。

别在对象构造函数中做实际的工作,构造函数应该包含变量的初始化,但不会发生失败的操作。

即构造不能返回错误。

例如

classDevice{

function__construct($param){

//这里的代码应该不发生失败

}

functionopen(){

//这里的代码返回失败和成功

4SQL代码

4.1SQL代码层

SQL关键词语大写(SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,TABLE,INDEX,COUNT,MAX,MIN,FROM,WHERE,AS,LEFTJOIN,RIGHTJOIN,ON,AND,ORDERBY,DESC,ASC,GROUPBY,LIMIT等等),按照逻辑分行,比如SELECT/INSERT/UPDATE/DELETE在一行,FROM在一行,LEFTJOIN…ON/RIGHTJOIN…ON在一行,WHERE在一行,ORDERBY在一行,GROUPBY在一行,LIMIT在一行。

WHERE条件里面多个条件请使用括号来区分优先级。

数据表名称请使用名词单数形式,一律使用英文小写字母。

如果需要对名称作描述/分类,请在名词前/后加描述/分类关键词语,使用下划线间隔。

字段名建议使用表名缩写作为前缀。

$sql“SELECTfield1ASsomething,field2,field3

FROMtablea,tableb

WHERE(this=that)AND(this2=that2)”;

4.2MySQL的查询性能优化原则

(1)请不要在SELECT中使用DISTINCT;

(2)尽可能不要SELECT*,而应该查询需要用到的指定几个字段;

(3)不要对两个大表进行联合,无论是内联或外联。

对于需要对两个或多个表进行联合查询的情况,可以做两次或多次数据库查询;

(4)在WHERE条件中,尽可能对同类型的数据列进行比较;

(5)在WHERE条件中,尽量让有索引的数据列在比较表达始中单独出现;

(6)在WHERE条件中,根据数据列排除不合条件数据量由多到少的次序排列条件,在不能确定排除数据多少的前提下,一般来说表达式中使用=、!

要优先于>

=,更优先于LIKE

(7)如果WHERE条件中的值是数字,那么不要使用单引号进行类型转换

(8)如果WHERE条件中使用LIKE模式匹配,不要在模式开头使用通配符%

(9)不要对WHERE条件中的非BINARY属性的CHAR/VARCHAR字段,进行大小写转换

(10)尽可能不要在SELECT中使用GROUPBY

(11)SQL中尽量使用短语法:

INSERTINTOMYTABLE(FIELD1,FIELD2)VALUES(('

x'

'

y'

),('

p'

q'

));

4.3SQL语句汇总

在编程中请将所有使用到的SQL语句列表归总,每个模块一个SQL记录表。

每条语句进行EXPLAIN测试,并把10000次平均结果记录到SQL记录表中。

5HTML代码

5.1XHTML标准

(1)所有标签必须成对使用,input、img、br、hr等标签,可以使用/>

的方式,例如:

br/>

,<

inputtype="

text"

name="

name"

value="

/>

(2)所有XHTML的标签、元素,必须使用英文小写字母(JavaScript和CSS例外)

(3)所有XHTML标签的所有元素的属性,都需要使用英文双引号("

),不允许使用单引号,更不允许不使用引号

(4)对于selected,checked,请使用selected="

selected"

,checked="

checked"

(5)使用<

strong>

em>

来代替<

b>

i>

(6)不允许XHTML标签的混合嵌套,例如:

abc<

/b>

/i>

(7)img标签必须指定alt元素的属性,即使是空值;

a标签必须指定title元素的属性,即使是空值;

5.2可视化元素分离

不允许在table、tr、td、th、div、span等标签中直接定义宽度、高度、边框、字体、字体大小、字体颜色、背景色、背景图等等可视化内容,一律使用CSS来定义

6通用规定

6.1引号

所有字符串都使用单引号('

),除非包含需要转义的字符(比如\n之类)才允许使用双引号"

字符串中如果需要包含变量/数组/对象,请将字符串拆分,用点(.)连接变量/数组/对象。

向函数传递字符串变量,不要加引号。

对于在HereDoc里面使用的变量/数组/对象,请用大括号嵌套。

/*wrong*/

$str="

Thisisareallylongstringwithnovariablesfortheparsertofind."

do_stuff("

$str"

Thisisa$varstring"

/*right*/

$str='

Thisisareallylongstringwithnovariablesfortheparsertofind.'

do_stuff($str);

Thisisa'

.$var.'

string'

6.2关联数组

关联数组当中,请用单引号将key的字符串嵌套(例如:

$row['

id'

]比$row[id]快7倍),如果key是变量则不要使用引号嵌套:

$foo=$assoc_array[blah];

$foo=$assoc_array["

$var"

];

$foo=$assoc_array['

blah'

$foo=$assoc_array[$var];

6.3注释

以明确简洁的语句书写注释,注释格式使用PHPDocument格式(参见http:

//www.phpdoc.org/),即ZendStudio中自动提示的格式。

Ø

单行注释采用格式//2010-3-2gaojj注释说明;

如果修改的内容逻辑比较多,

◆可以在修改的内容顶部采用注释//2010-3-2gaojj注释说明START,

◆在内容尾部采用注释//2010-3-2gaojj注释说明END

函数和类的定义需使用phpdoc的格式说明

/**

*函数说明

*@paramstring$param1参数一

*@parambool$param2参数二

@returnarray返回数组

*/

//@FIXME标识该处程序需要修正

//@TODO标识需要实现的功能,以备以后继续完善

多行代码要注释且中间有逻辑换行的

/*

bugstart

……

end

6.4类型比较

对于提交/返回值,尽可能的使用===来检查类型是否匹配,这一点对于区分FALSE,NULL,'

0四种空值尤其有用(定义了的变量但未定义值,其值为NULL)。

函数返回值请用TRUE和FALSE来代替1和0。

对于比较字符串,必须使用strcmp()或者===,这样才进行类型检查。

var_dump('

01'

==1),返回结果为true,但是var_dump('

===1)的结果就是false了

对于in_arra

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

当前位置:首页 > PPT模板 > 中国风

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

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