大 连 软 件 行 业 标 准 DSIA04012010 PHP 编程规范 (试行) 2010 年 11 月 4 日发布 2010 年 10 月 19 日施行 大连软件行业协会 前 言 为规范 PHP 开发的编码风格,提高开发效率和降低开发人员的时间成本,建立统一的 PHP 开 发标准体系,依据国际、国内相关标准、法规,参照国际、国内通行的职业技能标准制定本规范。 本规范由大连市经济和信息化委员会提出并归口。 本规范项目召集单位:大连软件行业协会。 本规范项目专家组:孙毅、郎庆斌、孙鹏、张文远、林华英、尹宏、牟楠、王宗臣 本规范主要起草单位:大连普华阳光科技有限公司 本规范起草人:张世元、齐林、陆雷 本规范于二○一○年十一月四日首次发布。 PHP 编程规范 1. 适用范围 本规范规定了 PHP 开发当中的代码编写格式、注释及命名规则、错误及异常的处理方法、 性能与安全的操作准则。确立了 PHP 开发工作的一般原则。针对 PHP 开发过程当中模糊不清的 约定给出了统一明确的约定指南。 本标准适用于从事 PHP 开发的相关企业、开发团队、教育和培训服务机构以及相关决策等 机构,针对 PHP 开发工作进行约定、检验、鉴定以及针对 PHP 开发人员的技术培训。 2. 定义和术语 2.1 PHP 语言 PHP 是基于服务端应用和创建动态网页的多用途脚本语言,可嵌入 HTML,并支持主流数 据库和操作系统。 2.2 程序代码 程序代码是一系列计算机系统可以识别的,人类可读的具有特定含义的计算机语言字符集 合。 3. 代码编写格式 3.1 代码标记 PHP 程序可以使用来界定 PHP 代码,在 HTML 页面中嵌入纯变量时, 可以使用这样的形式。 3.2 缩进 PHP 程序中缩进宜按标准键盘的 1 个“TAB”键,即 4 个空格为单位,一段程序中不应出 现两种缩进的规则。 3.3 长度 a)单个函数的有效代码长度应控制在 100 行以内,不包括注释行。 b)单个类的有效代码长度应控制在 1500 行以内,不包括注释行。 3.4 行宽 每行PHP 代码的行宽宜设置为 80 个字符。 3.5 间隔 a)操作符两端应各空一个字符。 b)相应独立的功能模块之间应使用注释行间隔,并标明相应内容。 c)程序体上下之间应加入一个空白行,不应使用多空行。 3.6 对齐 a)关系密切的代码行应对齐,例如类型、修饰、名称、参数等。 b)连续赋值时应对齐操作符。 c)方法参数过多时应在每个参数的逗号后换行并对齐。 d)控制或循环中的条件大于行宽时,应在操作符前换行,对齐并注释相应条件。 e)变量定义应通过添加空格对齐操作符,同一类型的变量应放在一起。 3.7 括号 a)小括号(“( )”)使用过程中,“(”应和函数的关键词紧贴在一起,除此以外宜使用空 格将“(”同前面的内容分开;右括号“)”除后面是“)”或者是“.”以外,其它内容应一律用 空格隔开; b)大括号(“{ }”)中的语句应单独作为一行,其中: “{”应紧跟语句后; “}”应单独一行与程序体第一个字符对齐,并说明相应匹配的功能模块; c)较长的方法以及类、接口等的"}"后应使用//end ...等标识结束。例如: 类的结束符:}//EOC ClassName, 方法结束符:}//end methodName(), 功能块结束:}//end if...userName is null? 循环体结束:}//end for...every user in userList 示例: 4. 注释 4.1 预注释 预注释中,应包括程序名称、程序版本及修订版本号、CVS(版本控制系统)控制字符串、 更新时间等信息内容。在预注释中,宜放入相应的 CVS 控制字串,以方便 CVS 提交时自动更 新。宜采用多行注释的方式。 预注释示例代码: 0){ $n = $i; } } //变量对齐 3.6----------------------------------------------- $count = 100; $length = 0; $user_name = null; $porduct = array(); //声明数组 //参数对齐 3.6---------------------------------------------- getConnection($url, $user_name, $password){ ... } //getConnection()结束 //换行对齐 3.6---------------------------------------------- $sql = "SELECT * ". " FROM TProduct WHERE Prod_ID = ". $prod_id; //条件对齐---------------------------------------------- if( Condition1 //当条件一 && Condition2 //并且条件二 || Condition3){ //或者条件三 ... } //操作符两边空格---------------------------------------- $result = (($a + 1) * 3 / 2 + $num).'Test'; $condition ? func1($var) : func2($var); ?> 4.2 类、接口注释 在类、接口定义之前,应做相应注释,包括类、接口的目的、作用、功能、继承于何种父 类,实现的接口、实现的算法、使用方法、示例程序等。 类、接口注释示例代码: 4.3 函数方法注释 a)应明确该方法的功能、作用、各参数含义及返回值等。 b)若在函数方法内注释复杂算法,应用/*...*/。 c)为参数作注释时应注明取值范围和返回值,还应明确相应失败、错误、异常时的返回 情况。 函数方法注释示例代码: /* 开发组名称和版权声明等 $RCSfile:forumdisplay.php,v $ $Revision:1.75$ $Date:2006/02/23 13:44:02$ */ /** * 字符串实用类 * * 定义字符串操作时所需要用到的方法,如转换中文、HTML 标记处理等。 * * @author $Author: l_walker$ * @version $Revision: 1.2 $ $Date: 2003/05/15 02:10:27 $ */ public class StringUtil{ … } 4.5 其它注释 程序开发中的临时代码和调试代码,应添加注释。譬如:“//debug”。 其它注释示例代码: 5. 命名 5.1 文件 文件名应使用小写英文字母和下划线:“_”,文件名不宜出现数字,不应使用纯数字命名。 可用前缀来明确文件的类别及功能,例如:class_db_mysql.php。 5.2 变量 变量名中所有字母宜小写。对于一个变量使用多个单词的,应使用下划线’_’作为每个词 的间隔。例如:$base_dir、$red_rose_price 等。 5.3 常量 常量应全部使用大写字母命名,少数特别必要的情况下,可以使用下划线来分隔单词;例 如:define("A_GLOBAL_CONSTANT", "Hello world!");PHP 的内建值 TRUE、FALSE 和 NULL /** * 执行查询。 * 该方法调用 Statement 的 executeQuery(sql)方法并返回 ResultSet * 结果集。 * @param sql 标准的 SQL 语句 * @return ResultSet 结果集,若查询失败则返回 null * @throws SQLException 当查询数据库时可能引发此异常 */ function execute_query($sql) { //SQL 语句都不能为空 if("" != $sql){ //返回查询执行结果 return mysql_query($sql); } return null; }//end eexecute_query() $num = 1; $flag = TURE; //debug if(empty($flag)){ ... //Statements } 应全部采用大写字母书写。 5.4 类、接口 类和接口命名,应以大写字母开头;多个单词组成命名,单词之间不必使用间隔,各个单 词首字母宜使用大写。类和接口中属性的命名方式参考本规范 5.2 的变量命名规范。 例如:class MyClass 或 class DbOracle 等。 5.5 方法、函数 函数名应一律使用小写格式,如有必要,单词之间宜使用下划线“_”进行分割;以标准计 算机英文为蓝本,可使用拼音、但拼音应该语义清晰明了,不应使用拼音英文混杂的命名方式; 变量命名只能是使用项目中有据可查的英文缩写方式。譬如:宜使用$data 这样的形式,而不宜 使用$data1、$data2 这样容易产生混淆的形式,应使用$theraddata、$postdata 这样容易理解的形 式。 6. 声明 6.1 类、接口 类的划分代码块不宜太大,避免造成过于庞大的单个类。也不宜太细,避免类的继承太深。 根据类的职责,应当一个类只做一件事,每个类应写在单独一个程序文件中。宜多使用设计模 式,随时重构。多个类中使用相同方法时,应将其方法提到一个接口中或使用抽象类,提高复 用度。 6.2 方法 一个方法应只完成一项功能。定义系统的公用接口方法以外的方法时,应缩小其可见性。 避免用一个类的实例去访问其静态变量和方法。在一个较长的方法里不应提供多个出口。不应 定义过多的参数列表,应控制在 5 个以内。 方法的示例代码如下: //不要使用这钟方式,当处理程序段很长时将很难找到出口点 if($condition){ return "A"; }else{ return "B"; } //建议使用如下方式 $result = null; if($condition){ $result = "A"; }else{ $result = "B"; } return $result; 6.3 变量 任何变量在进行累加、直接显示或存储前应进行声明。 例如: $number = 0; //数值类行声明 $string = ’’; //字符串声明 $array = array(); //数组声明 判断一个无法确定(不知道是否已被赋值)的变量时,可用 empty()或 isset(),不应直接使用 if($switch)的形式。 6.4 常量 任何常量应在使用前声明,并且常量应在其他声明之前进行声明。 6.5 其他 在程序代码中不应直接使用有特殊含义的数字及字符串。直接使用的数字或字符串时应先 定义和说明。 示例代码: 7. 表达式与语句 7.1 控制语句 左大括号应与关键词同行,右大括号应与关键字同列。 if 结构中,else 和 elseif 与前后两个大括号同行,左右各一个空格;另外,即便 if 后 //错误的示例 //22和19 这样的数字,很难知道它的含义,造成理解上的困难。 if (22 == $foo){ start_thermo_nuclear_war(); }else if (19 == $foo){ refund_lotso_money(); }else { cry_cause_im_lost(); } //正确的示例代码。 //应该用define()来给你想表示某样东西的数值一个真正的名字, //而不应直接采用数字,这样的代码阅读起来清晰明了。 define("PRESIDENT_WENT_CRAZY", "22"); define("WE_GOOFED", "19"); if(PRESIDENT_WENT_CRAZY == $foo){ start_thermo_nuclear_war(); }else if(WE_GOOFED == $foo){ refund_lotso_money(); 只有一行语句,应加入大括号,以保证结构清晰。 switch 结构中,当一个 case 块处理后,应添加 break。break 的位置与 case 同在一行,或 新起一行均可。同一 switch 体中,break 的位置格式应当保持一致。 控制语句示例代码: 7.2 循环语句 在 for 和 while 的循环使用中,对于 continue、break 的使用,应避免导致程序流程混乱, 不易理解和维护障碍。 8. 错误与异常 8.1 已检查异常与运行时异常 已检查异常应捕捉并做相应处理,不能将已检查异常抛到系统之外去处理。 对可预见的运 行时异常应当进行捕捉并处理。 8.2 异常错误提示设置 在软件开发和调试阶段,如果使用 error_reporting(E_ALL),宜在程序文件的头几行进行 设置。 在软件发布时,应使用 error_reporting(E_ERROR | E_WARNING | E_PARSE)作为默认的错 误报告级别,利于用户使用并可将无谓错误提示出现频率降至最低。 9. 测试与 BUG 跟踪 if($condition){ switch($var){ case 1: echo 'var is 1'; break; case 2: echo 'var is 2'; break; default: echo 'var is neither 1 or 2'; break; } }elseif($condition){ switch($str){ case 'abc'; $result = 'abc'; break; default: $result = 'unknown'; break; } }else{ echo 'unknown'; } 9.1 测试基本原则 测试要完整并且全面,应将各种可能的情况都测试通过,将可能的 Bug 在开发中捕捉并处 理掉。测试要保证可再测试性。 测试应当对数据库等资源不留或少留痕迹。譬如:当测试添加一个用户时,在其成功后应 及时从数据库中删除该记录,避免残余数据的产生。对关键功能应测试并通过。 9.2 BUG 跟踪和缺陷处理 当系统出现 BUG 时,应由该 DUG 的负责人(代码负责人)尽快修改。 DUG 的处理根 据其优先级高低和重要级别高低先后处理。不应隐瞒 BUG。 10. 性能与安全 10.1 输入与输出 当程序接受输入操作时,应检查输入数据的合法性,避免造成不合法或错误的数据存入数 据库或者导致意料之外的程序操作。譬如:如果程序以用户输入的参数值做为文件名,进行文 件操作,恶意输入系统文件名会造成系统损毁。 应核实对 cookie 的使用以及对用户数据的处理可能出现的问题,避免造成用户数据泄漏。 10.2 针对 PHP.INI 的规则 设置 register_globals = off 10.3 SQL 语句处理规则 在程序接到参数需要进行 SQL 操作时,应对特殊符号做转义,尤其要注意分号(”;”)和单 引号(“'”)的使用。 11. 其它 包含调用程序文件,应全部使用 require_once()或 include_once(),以避免可能的重复包含问 题。 12. 附录 12.1 注释模板 | // | Your Name | // +----------------------------------------------------------------------+ // $ Id $ ?>
还剩11页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

zsyk

贡献于2011-07-07

下载需要 20 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf