Php编程规范.docx
- 文档编号:25585252
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:19
- 大小:58.57KB
Php编程规范.docx
《Php编程规范.docx》由会员分享,可在线阅读,更多相关《Php编程规范.docx(19页珍藏版)》请在冰豆网上搜索。
Php编程规范
PHP编程规范
(试行)
前言
为规范PHP开发的编码风格,提高开发效率和降低开发人员的时间成本,建立统一的PHP开发标准体系,依据国际、国内相关标准、法规,参照国际、国内通行的职业技能标准制定本规范。
本规范由大连市经济和信息化委员会提出并归口。
本规范项目召集单位:
本规范项目专家组:
本规范主要起草单位:
本规范起草人:
本规范于二○一○年十一月四日首次发布。
PHP编程规范
1.适用范围
本规范规定了PHP开发当中的代码编写格式、注释及命名规则、错误及异常的处理方法、性能与安全的操作准则。
确立了PHP开发工作的一般原则。
针对PHP开发过程当中模糊不清的约定给出了统一明确的约定指南。
本标准适用于从事PHP开发的相关企业、开发团队、教育和培训服务机构以及相关决策等机构,针对PHP开发工作进行约定、检验、鉴定以及针对PHP开发人员的技术培训。
2.定义和术语
2.1PHP语言
PHP是基于服务端应用和创建动态网页的多用途脚本语言,可嵌入HTML,并支持主流数据库和操作系统。
2.2程序代码
程序代码是一系列计算机系统可以识别的,人类可读的具有特定含义的计算机语言字符集合。
3.代码编写格式
3.1代码标记
PHP程序可以使用
php...?
>或
...?
>来界定PHP代码,在HTML页面中嵌入纯变量时,可以使用
=$variablename?
>这样的形式。
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...等标识结束。
例如:
类的结束符:
}//EOCClassName,
方法结束符:
}//endmethodName(),功能块结束:
}//endif...userNameisnull?
循环体结束:
}//endfor...everyuserinuserList示例:
Php//代码标记3.1
//缩进3.2-----------------------------------------------for($i=0;$i<$length;$i++){
if($i>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*".
"FROMTProductWHEREProd_ID=".
$prod_id;
//条件对齐----------------------------------------------if(Condition1//当条件一
&&Condition2//并且条件二
||Condition3){//或者条件三
...
}
//操作符两边空格----------------------------------------
$result=(($a+1)*3/2+$num).'Test';
$condition?
func1($var):
func2($var);
>
4.注释
4.1预注释
预注释中,应包括程序名称、程序版本及修订版本号、CVS(版本控制系统)控制字符串、更新时间等信息内容。
在预注释中,宜放入相应的CVS控制字串,以方便CVS提交时自动更新。
宜采用多行注释的方式。
预注释示例代码:
/*
开发组名称和版权声明等
$RCSfile:
forumdisplay.php,v$
$Revision:
1.75$
$Date:
2006/02/2313:
44:
02$
*/
4.2类、接口注释
在类、接口定义之前,应做相应注释,包括类、接口的目的、作用、功能、继承于何种父类,实现的接口、实现的算法、使用方法、示例程序等。
类、接口注释示例代码:
/**
*字符串实用类
*
*定义字符串操作时所需要用到的方法,如转换中文、HTML标记处理等。
*
*@author$Author:
l_walker$
*@version$Revision:
1.2$$Date:
2003/05/1502:
10:
27$
*/
publicclassStringUtil{
…
}
4.3函数方法注释
a)应明确该方法的功能、作用、各参数含义及返回值等。
b)若在函数方法内注释复杂算法,应用/*...*/。
c)为参数作注释时应注明取值范围和返回值,还应明确相应失败、错误、异常时的返回
情况。
函数方法注释示例代码:
/**
*执行查询。
*该方法调用Statement的executeQuery(sql)方法并返回ResultSet
*结果集。
*@paramsql标准的SQL语句
*@returnResultSet结果集,若查询失败则返回null
*@throwsSQLException当查询数据库时可能引发此异常
*/
functionexecute_query($sql){
//SQL语句都不能为空
if(""!
=$sql){
//返回查询执行结果
returnmysql_query($sql);
}
returnnull;
}//endeexecute_query()
4.5其它注释
程序开发中的临时代码和调试代码,应添加注释。
譬如:
“//debug”。
其它注释示例代码:
$num=1;
$flag=TURE;
//debugif(empty($flag)){
...//Statements
}
5.命名
5.1文件
文件名应使用小写英文字母和下划线:
“_”,文件名不宜出现数字,不应使用纯数字命名。
可用前缀来明确文件的类别及功能,例如:
class_db_mysql.php。
5.2变量
变量名中所有字母宜小写。
对于一个变量使用多个单词的,应使用下划线’_’作为每个词的间隔。
例如:
$base_dir、$red_rose_price等。
5.3常量
常量应全部使用大写字母命名,少数特别必要的情况下,可以使用下划线来分隔单词;例如:
define("A_GLOBAL_CONSTANT","Helloworld!
");PHP的内建值TRUE、FALSE和NULL应全部采用大写字母书写。
5.4类、接口
类和接口命名,应以大写字母开头;多个单词组成命名,单词之间不必使用间隔,各个单词首字母宜使用大写。
类和接口中属性的命名方式参考本规范5.2的变量命名规范。
例如:
classMyClass或classDbOracle等。
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其他
在程序代码中不应直接使用有特殊含义的数字及字符串。
直接使用的数字或字符串时应先定义和说明。
示例代码:
//错误的示例
//22和19这样的数字,很难知道它的含义,造成理解上的困难。
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");
if(PRESIDENT_WENT_CRAZY==$foo){
start_thermo_nuclear_war();
}elseif(WE_GOOFED==$foo){
refund_lotso_money();
7.表达式与语句
7.1控制语句
左大括号应与关键词同行,右大括号应与关键字同列。
if结构中,else和elseif与前后两个大括号同行,左右各一个空格;另外,即便if后只有一行语句,应加入大括号,以保证结构清晰。
switch结构中,当一个case块处理后,应添加break。
break的位置与case同在一行,或新起一行均可。
同一switch体中,break的位置格式应当保持一致。
控制语句示例代码:
if($condition){
switch($var){
case1:
echo'varis1';break;
case2:
echo'varis2';break;
default:
echo'varisneither1or2';break;
}
}elseif($condition){
switch($str){
case'abc';
$result='abc';
break;
default:
$result='unknown';
break;
}
}else{
echo'unknown';
}
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跟踪
9.1测试基本原则
测试要完整并且全面,应将各种可能的情况都测试通过,将可能的Bug在开发中捕捉并处理掉。
测试要保证可再测试性。
测试应当对数据库等资源不留或少留痕迹。
譬如:
当测试添加一个用户时,在其成功后应及时从数据库中删除该记录,避免残余数据的产生。
对关键功能应测试并通过。
9.2BUG跟踪和缺陷处理
当系统出现BUG时,应由该DUG的负责人(代码负责人)尽快修改。
DUG的处理根据其优先级高低和重要级别高低先后处理。
不应隐瞒BUG。
10.性能与安全
10.1输入与输出
当程序接受输入操作时,应检查输入数据的合法性,避免造成不合法或错误的数据存入数据库或者导致意料之外的程序操作。
譬如:
如果程序以用户输入的参数值做为文件名,进行文件操作,恶意输入系统文件名会造成系统损毁。
应核实对cookie的使用以及对用户数据的处理可能出现的问题,避免造成用户数据泄漏。
10.2针对PHP.INI的规则
设置register_globals=off
10.3SQL语句处理规则
在程序接到参数需要进行SQL操作时,应对特殊符号做转义,尤其要注意分号(”;”)和单引号(“'”)的使用。
11.其它
包含调用程序文件,应全部使用require_once()或include_once(),以避免可能的重复包含问题。
12.附录
12.1注释模板
php
/*vim:
setexpandtabtabstop=4softtabstop=4shiftwidth=4:
*/
//+----------------------------------------------------------------------+
//|PHPversion4|
//+----------------------------------------------------------------------+
//|Copyright(c)1997-2002ThePHPGroup|
//+----------------------------------------------------------------------+
//|Thissourcefileissubjecttoversion2.0ofthePHPlicense,|
//|thatisbundledwiththispackageinthefileLICENSE,andis|
//|availableatthroughtheworld-wide-webat|
//||
//|IfyoudidnotreceiveacopyofthePHPlicenseandareunableto|
//|obtainitthroughtheworld-wide-web,pleasesendanoteto|
//|license@sowecanmailyouacopyimmediately.|
//+----------------------------------------------------------------------+
//|Authors:
OriginalAuthor
//|YourName
//+----------------------------------------------------------------------+
//$Id$
>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Php 编程 规范