第一章编码规范为了更好地提高技术部门的工作效率,保证开发的有效性和合理性,最大限度地提高程序代码的可读性和可重用性,特制定本规范。开发团队可以根据自己的实际情况对本规范进行补充或删减。第二章总体要求技术部的php开发规范会参考PEAR规范,基本上采用PEAR规定的规范,并在其基础上增加、修改或删除一些适合特定开发环境的规范。本规范仅针对PHP开发过程中的编码规范,不会重点对PHP开发项目中的文件、目录、数据库等进行规范。本规范包括命名约定、代码缩进规则、控制结构、函数调用、函数定义、注释,包括代码、PHP标签、文件头中的注释块、CVS标签、URL示例以及PHP开发中的常量命名。等规则。第三章安全规则3.1包含文件3.1.1命名规则提取的具有常用功能的包含文件以.inc为后缀命名,表明这是一个包含文件。如果有多个.inc文件需要包含多个页面,请将所有.inc文件封装在一个文件中。对于特定的页面,只需要替换一个.inc文件。例如:xxx_session.incxxx_comm..incxxx_setting.incmysql_db.inc将上述文件封装在xxx.basic.inc文件中,方法如下:require_once("xxx_session.inc");require_once("xxx_comm.inc");require_once("xxx_setting.inc");require_once("mysql_db.inc");注意:是否需要打包成文件视情况而定。如果各个inc的功能分散到不同的页面使用,不建议打包。3.1.2存储规则一般包括不需要直接暴露给用户的文件,所以应该放在WebServer无法访问的目录下,避免因配置问题泄露配置信息。3.2安全规则输入输出检查是否做了HTML代码过滤。可能出现的问题:如果有人输入恶意HTML代码,会导致窃取cookies,生成恶意登录表单,破坏网站。数据库操作前检查变量是否转义可能出现的问题:如果查询语句中写入的字符串变量中包含一些特殊字符,如引号(',")、分号(;)等,可能会执行非预期的操作。建议的方法:使用mysql_escape_string()或实现类似功能的函数。检查输入值的合法性可能出现的问题:不正常的值会导致问题。如果不检查输入的值,就会在UDB中存入非法或错误的数据,存入其他数据库中,或发生程序意外操作。例:如果程序使用用户输入的参数值作为文件名进行文件操作,恶意输入系统文件名将导致系统损坏。验证cookies的使用和用户数据处理过程中可能出现的问题:cookies的不正确使用可能会导致用户数据泄露。访问控制对于内部产品或合作伙伴使用的产品,考虑增加访问控制日志,确保用户安全日志中不记录机密信息(例如:用户的密码),确保关键用户操作保留完整的用户访问记录https对于敏感数据的传输,使用https3.3PHP的一些规则setregister_globals=off(Y!PHP已经禁止register_globals,如果你使用Y!PHP可以忽略这个设置)seterror_reporting=E_ALL(Y!的默认设置)PHP),并修复所有错误和警告,以将实际操作放入文件中引用。将引用的文件放在不能直接浏览的目录下3.4.1对输入参数值进行转义页面接收到参数需要SQL操作。这时候就需要进行转义了,尤其要注意“;”。如:$a="走吧";$sql="插入tmp(col)值('$a')";在这种情况下,误差的不确定性就出现了。3.4.2操作大的HTML文本在很多情况下,需要存储大段的HTML文本供页面使用,例如用户定义的页眉和页脚。需要删除脚本标签以避免执行恶意的php代码。转换“<”“>”符号,保证代码的完整性。第四章编码标准4.1命名标准制定统一的命名标准对于项目开发非常重要。不仅可以养成程序员良好的开发习惯,还可以增加程序的可读性、可移植性和复用性。它还可以提高项目开发的效率。4.1.1变量命名变量命名分为普通变量、静态变量、局部变量、全局变量和Session变量的命名规则。1)普通变量普通变量的命名遵循以下规则:a.所有字母均为小写;b.对于使用多个单词的变量,使用“_”作为每个单词之间的间隔符。例如:$base_dir、$red_rose_price等。2)静态变量静态变量命名遵循以下规则:a.静态变量以小写s_开头;b.静态变量的字母全部小写;C。由多个单词组成的变量名使用'_'作为每个单词之间的间隔。示例:$s_base_dir、$s_red_rose_prise等3)局部变量局部变量的命名遵循以下规则:a.所有字母都使用小写;b.变量以'_'开头;C。由多个单词组成的局部变量名使用'_'作为每个单词之间的空格。示例:$_base_dir、$_red_rose_price等。4)全局变量全局变量应以'g'为前缀,了解变量的作用域非常重要。例如,全局$gLOG_LEVEL;全局$gLOG_PATH;5)全局常量和全局变量按照以下规则命名:a.对所有字母b使用大写。全局变量使用'_'作为多个单词之间的间隔符。示例:$BASE_DIR、$RED_ROSE_PRICE等。6)会话变量会话变量命名遵循以下规则:a.所有字母都大写;b.会话变量名以'S_'开头;C。在多个单词之间使用“_”空格。示例:$S_BASE_DIR、$S_RED_ROSE_PRICE等。4.1.2类命名PHP中的类命名遵循以下规则:a.以大写字母开头;b.由多个单词组成的变量名,单词之间没有空格,每个单词的首字母大写。示例:MyClass类或DbOracle类等。4.1.3方法或函数方法或函数的命名遵循以下规则:a.第一个字母小写;b.多个单词之间不使用空格,除第一个单词外,其他单词均大写。例如:functionmyFunction()或functionmyDbOracle()等。4.1.4缩略语当变量名或其他命名中遇到缩略语时,请参考具体的命名规则,而不是使用缩略语原来的全大写方法。示例:函数myPear(不是myPEAR)函数getHtmlSource(不是getHTMLSource)。4.1.5数据库表名数据库表名遵循以下规则:a.所有表名均使用小写字母;b.对于普通数据表,在末尾使用_t;C。对于视图,在末尾使用_v;d.对于由多个单词组成的表名,使用_interval;例如:user_info_t和book_store_v等。4.1.6数据库字段数据库字段命名遵循以下规范:a.全部使用小写;b.在多个单词之间使用_。示例:user_name、rose_price等4.2编写规则编写规则是指编写PHP程序时代码编写的规则,包括缩进、结构控制等:4.2.1代码缩进编写代码时,必须注意代码缩进规则,我们规定代码的缩进规则如下:a.使用4个空格作为缩进,而不是tab缩进(对于ultraedit,可以预先设置)示例:for($i=0;$i<$count;$i++){echo"test";}4.2.2大括号{}书写规则在程序中书写结构控制代码,如if、for、while、switch等结构。花括号的传统书写习惯有两种,分别是:a.{不换行直接跟在控制语句后面,比如for($i=0;$i<$count;$i++){echo"test";}b.{在控制语句的下一行,比如for($i=0;$i<$count;$i++){echo"test";}其中a是PEAR建议的方法,但是就实际写的,这个不影响程序的规范,影响文档用phpdoc的实现,所以以上两种方法可以根据个人习惯使用,但在同一个程序中只需要其中一种即可,避免阅读不便。4.2.3括号()与函数、关键字等括号、关键字、函数遵循以下规则:a.括号和关键字不要靠在一起,要用空格隔开;如if($a<$b);b.括号和函数名之间没有空格;例如$test=date("ymdhis");C。除非必要,否则不要在Return语句中使用括号。比如return$a;4.2.4=程序中写入符号=符号的编写遵循以下规则:a.=号两边,需要一个空格;如$a=$b,if($a==$b)等;b.在声明块中,或者实现相同功能的块中,要求=号尽量上下对齐。左边可以用多个空格保持对齐,右边需要一个空格;下面举例:$testa=$aaa;$testaa=$bbb;$testaaa=$ccc;4.2.5ifelseswitchforwhile等写法控制结构的写法遵循以下规则:a.在if条件判断中,如果使用常量判断条件,就把常量放在等号或者不等号左边,比如:if(6==$errorNum),因为如果你漏掉了一个等号equation,thesyntaxcheck设备会为你报错,你可以快速找到错误位置,所以要多注意这种写法;b.开关结构中必须有一个默认块;C。在for和wiile的循环使用中,要警惕continue和break的使用,避免出现goto之类的问题;4.2.6类的构造函数如果要在类中编写构造函数,必须遵循以下规则:a.构造函数中不能有太多实际操作,最多用来初始化一些值和变量;b.不能因为使用操作而在构造函数中返回false或错误,因为在声明和实例化对象时,不能返回错误;4.2.7语句断行,每行控制在80个字符以内在代码编写中,遵循以下原则:a.尽量保证程序语句一行一行,不要让一行语句太长导致换行;b.一行代码尽量不要太长,一般在80个字符以内;C。如果一行代码太长,请使用类似.=的方法断行;d.对于数据库的sql语句操作,尽量不要把sql语句写在函数中,而是先用变量定义sql语句,然后在执行操作的函数中调用定义的变量;示例:$sql="SELECTusername,password,address,age,postcodeFROMtest_t";$sql.="WHEREusername='aaa'";$res=mysql_query($sql);4.2.8Nomagicnumber源代码中使用的裸数字是magicNumbers,因为包括作者在内的任何人在三个月内都没有理解它。例如:if(22==$foo){start_thermo_nuclear_war();}elseif(19==$foo){refund_lotso_money();}else{cry_cause_im_lost();您应该使用define()为某物的值提供真实名称,而不是空数字,例如:define("PRESIDENT_WENT_CRAZY","22");define("WE_GOOFED","19");define("THEY_DIDNT_PAY","16");if(PRESIDENT_WENT_CRAZY==$foo){start_thermo_nuclear_war();}elseif(WE_GOOFED==$foo){refund_lotso_money();}elseif(THEY_DIDNT_PAY==$foo){infinite_loop();}else{happy_days_i_know_why_im_here();}4.2.9True/false和0/1判断遵循以下规则:a.不能用0/1代替true/false,在PHP中,这是不相等的;b.不要使用非零表达式、变量或方法直接进行真假判断,必须使用严格完整的真假判断;例如:不要使用if($a)或if(checka())而使用if(FALSE!=$a)或if(FALSE!=check())4.2.10避免嵌入赋值避免嵌入赋值在下面程序中的例子:不要使用这个方法:while($a!=($c=getchar())){processthecharacter}4.2.11错误返回检测规则检查所有系统调用的错误信息,除非你想忽略错误。为每条系统错误信息定义系统错误文本,并记录错误LOG。4.3程序注释4.3.1程序头注释块每个程序头必须有一个统一的注释块,规则如下:a.必须包含程序的描述;b.必须包括作者;C。必须包含写作日期;d.必须包含版本信息;e.必须包含项目名称;F。必须包含文件名;G。重要的使用说明,如类调用方法、注意事项等;参考例子如下:|//|TomasV.V.Cox
