您好,欢迎访问三七文档
PHP代码规范一编辑器设置1.使用Tab缩进,不要使用空格鉴于很多编辑器在保存文件时会自动清除用于缩进的空格,所以我们一律使用Tab键进行缩进。2.UNIX文件格式请将编辑器设置对所有程序使用UNIX格式保存,不要使用Win32或者Mac的格式。例如,EditPlus里面Document-FileFormat(CR/LF)-Unix。对于windows格式文件,以Ctrl+M结束(vim下为^M),需要过滤掉:$text=strtr($text,\x0D,);二命名约定1.公共库名称空间TPLIB,TencentPHPLibrary2.常量名全局常量,用'_'分隔每个单词,使用TPLIB_前缀。如:define(TPLIB_TEST_HELLO,Helloworld!);类常量,用'_'分隔每个单词,如:classTPLIB_Package{constEXAMPLE_CONST;}尽量使用类常量代替全局常量。3.变量名局部变量的字母都使用小写,使用“_”作为每个词的分界。如:$php_var;函数、方法的参数,首字母为小写。如:functiontest_func($paramName){}类属性,使用骆驼命名法命名,与函数、方法的参数命名方法相同;全局变量,字母都使用大写,使用“_”作为每个词的分界,公共库中无特殊需求不使用全局变量。命名必须具有描述性,但务求简练。不要在变量名中使用长句。通常在变量名中使用一对词语(使用下划线间隔)对变量进行简要描述这种方式更好。4.循环索引变量在循环结构中,仅允许使用一个字母长度的循环索引变量。通常我们使用$i,如果存在嵌套循环,那么子循环的索引变量应该使用$j,其下级循环的索引变量就是$k,以此类推。如果循环被原已存在一些有具体含义名称的变量索引,则不受此规定约束。例如:for($i=0;$i$outer_size;$i++){for($j=0;$j$inner_size;$j++){foo($i,$j);}}5.类的方法命名使用骆驼命名法命名,例如getCache()、echoName()。名字采用“动词+宾语”的形式。例如write(动词)Cache(宾语)。6.函数命名函数应该使用描述性词语命名。我们不使用C的方式,也不使用类似stristr()这种没有描述、令人费解的函数名。所有函数名必须全部使用英文小写字母,函数名中的单词之间使用下划线间隔。某些情况下,函数名中更适合使用动词。例如:print_login_status(),get_user_data(),等等。一个基本的哲学观点,就是不要仅仅出于懒惰而去破坏代码的清晰。比如print_login_status_for_a_given_user()太长,换成print_user_login_status()会更好,或者仅仅用print_login_status()。7.函数自变量自变量的命名应遵守变量命名规定。我们不想使用do_stuff($a,$b,$c)中的$a,$b,$c这种缺乏实际表述意义的名称。多数情况下,我们希望能够仅仅通过查看函数的声明就可以了解如何去使用函数。8.名称空间与类命名使用帕斯卡命名方法,如HelloWorld。由于PHP5.3版本之前没有实现命名空间语法,这给类命名带来了一定的麻烦。这里使用类名中附带名称空间的命名方法,名称空间与类名间使用下划线连接。如TPLIB库中Test包的HelloWorld类:TPLIB_Test_HelloWorld所有库中的类,都以TPLIB_开头,根据用途命名。将类名字中的“_”替换为目录分隔符,就是这个类的定义文件所在位置。这种命名规则和目录结构可以避免命名冲突,根据类名字就能找到文件存放位置。如:TPLIB_Test_HelloWorld类在库中的位置为TPLIB/Test/HelloWorld.php9.文件命名包含文件应该以.inc.php方式命名,例如config.inc.php。单独类的文件使用Classname.php方式命名,包中的类使用PackageName/ClassName.php命名。三代码层1.使用大括号在语言结构(if,else,while,switch,for,foreach)中请在陈述与执行的代码分行,执行的代码放到大括号中,大括号不可省略。例如:/*Theseareallwrong.*/if(condition)do_stuff();if(condition)do_stuff();while(condition)do_stuff();for($i=0;$isize;$i++)do_stuff($i);/*Theseareright.*/if(condition){do_stuff();}while(condition){do_stuff();}for($i=0;$isize;$i++){do_stuff();}2.大括号的位置在语言结构(if,else,while,switch,for,foreach)中和类(class)、函数(function)、方法(method)中,左、右大括号必须单独占一行,与其声明处在相同的缩进级别。例如:/*Theseareallwrong.*/if(condition){while(condition2){...}}else{...}/*Theseareright.*/if(condition){while(condition2){...}}else{...}/*Theseareallwrong.*/for($i=0;$i$size;$i++){...}/*Theseareright.*/for($i=0;$i$size;$i++){...}/*Theseareallwrong.*/while(condition){...}/*Theseareright.*/while(condition){...}/*Theseareallwrong.*/switch(condition){case:1...default:...}/*Theseareright.*/switch(condition){case:1...default:...}/*Theseareright.*/functiondo_stuff(){...}/*Theseareright.*/classsome_class{functiona_method(){...}}3.数组格式对于数组的定义,可以使用分行表述每个key=value,,每行开头使用一个Tab进行缩进。右括号和该array(的起始行保持对齐。例如:$arr=array('key1'='value1','index1'='value2',);4.在运算符之间使用空格在比较运算符(、、=、=、==、===、!=、、!==)、赋值运算符(=)、数学运算符(+、-、*、/、%)、位运算符(&、|、^、~、、)、逻辑运算符(!、&&、||)、冒号(:)、问号(?)、字符串连接运算符(.)、字符串连接赋值运算符(.=)前后,以及左括号(()前(函数调用例外)、逗号(,)后请使用空格进行间隔。例如:/*Theseareallwrong.*/$i=0;/*Theseareallright.*/$i=0;/*Theseareallwrong.*/if($i7).../*Theseareallright.*/if($i7).../*Theseareallwrong.*/if(($i7)&&($j8)).../*Theseareallright.*/if(($i7)&&($j8)).../*Theseareallwrong.*/do_stuff($i,foo,$b);/*Theseareallright.*/do_stuff($i,foo,$b);/*Theseareallwrong.*/for($i=0;$i$size;$i++).../*Theseareallright.*/for($i=0;$i$size;$i++).../*Theseareallwrong.*/$i=($j$size)?0:1;/*Theseareallrightg.*/$i=($j$size)?0:1;5.运算符优先级对于容易引起迷惑的表达式中不同运算符的优先级,请使用括号来区分优先级。例如:/*what'stheresult?whoknows.*/$bool=($i7&&$j8||$k==4);/*nowyoucanbecertainwhatI'mdoinghere.*/$bool=(($i7)&&(($j8)||($k==4)))6.条件语句请在条件陈述中使用&&和||,不要使用and和or。例如:/*Theseareallwrong.*/if(($i7)and($j8)).../*Theseareallright.*/if(($i7)&&($j8))...多重if...elseif...else最好换用选择结构体(switch...case)。7.语法结构在PHP中echo、exit(die)、return、continue、break、include、include_once、require、require_once等都属于语法结构,大部分语法结构都有两种形式:echo'Thisisastring';echo('Thisisastring');在PHP规定的允许使用的格式下,尽可能使用前一种语法结构的格式,而不要使用函数参数/表达式的形式,仅在参数包含表达式时才需要用括号将其括起来。当返回一个变量时通常不用括号,也建议不要用,这样既可以降低PHP的负担,又可以避免一些错误(见下)。注意:exit(die)只能使用括号结构对于return(),当用引用返回值时永远不要使用括号,只能通过引用返回变量,而不是语句的结果。如果使用return($a);时其实不是返回一个变量,而是表达式($a)的值(当然,此时该值也正是$a的值)。//won'twork,evaluatedasinclude(('vars.php')=='OK'),i.e.include('')if(include('vars.php')=='OK'){echo'OK';}//worksif((include'vars.php')=='OK'){echo'OK';}由于echo()是语法结构、没有返回值,所以速度比print()快。在输出多个字符串时,请使用echo的多参数方式(逗号,间隔),会比字符串连接方式(点.间隔)有更好的性能。8.类必须使用PHP5的__construct()和__destruct()方式,禁止使用PHP4的用与类同名函数的方式构造。避免使用魔术方法__get,__set,__autoload。在类里面多加函数不会影响性能。子类的方法比基类执行得更快。执行一个拥有一个参数和空函数体的函数相当于7-8次局部变量自增操作$localvar++,一个相似的方法调用当然就相当于15次局部变量自增操作$localvar++。别在对象构造函数中做实际的工作,构造函数应该包含变量的初始化,但不会发生失败的操作。即构造不能返回错误。例如classDevice{function__construct($param){//这里的代码应该不发生失败}functionopen(){//这里的代码返回失败和成功}}四SQL代码1.SQL代码层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/RIGHTJOI
本文标题:PHP代码规范
链接地址:https://www.777doc.com/doc-3856342 .html