您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 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和Break4.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;$i10;$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;$i10;$i++)错误for($i=0;$i10;$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((tasknomax_act_task_number)&&(n7stat_stat_item_valid(stat_item))){...//programcode}for(i=0,j=0;(iBufferKeyword[word_index].word_length)&&(jNewKeyword.word_length);i++,j++){...//programcode}for(i=0,j=0;(ifirst_word_length)&&(jsecond_word_length);i++,j++){...//programcode}第2章命名规范2.1变量命名规范使用三种书写方式:Pascal命名规则将标识符的每个单词的首字母都大写。ps:类命名与类的方法命名例如:BackColorCamel命名规则标识符的首字母小写,而后面连接的单词的首字母都大写。ps:方法内部变量命名,(函数外部参数命名)例如:backColorLinuxC命名规则变量所有字母都使用小写,使用'_'作为每个词的分界。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;尽量谨慎的使用缩写,不要用下划线作类名单词连接符。在类中,方法放到属性定义前边、公用方法放到专用方法前边。在为类命名前首先要知道它是什么。如果通过类名的提供的线索,你还是想不起这个类是什么的话,那么你的设计就还做的不够好。超过三个词组成的混合名是容易造成系统各个实体间的混淆,再看看你的设计,尝试使用(CRCSessioncard)看看该命名所对应的实体是否有着那么多的功用。对于派生类的命名应该避免带其父类名的诱惑,一个类的名字只与它自身有关,和它的父类叫什么无关。有时后缀名是有用的,例如:如果你的系统使用了代理(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/D
本文标题:PHP-程序编码规范资料
链接地址:https://www.777doc.com/doc-5067293 .html