张恩民谈PHP代码开发规范(文字版)

 

 

标准化不是特殊的个人风格,它让程序员可以了解任何代码,弄清程序的状况;新人可
以很快的适应环境;防止新接触php的人一次次的犯同样的错误;在一致的开发环境下,
可以减少人们犯错的机会。帮助公司开发项目成立完善的开发标准以及对程序员的语法标准控制。
目录命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,例:
templates
文件命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,例:
index.php  或  index_ad.php
index.htm  或  index_ad.htm
局部变量命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,例:
$repeat_cont   = '';
$del_user_sql  = '';
全局常量命名
使用英文名词、动词,所有字母都使用大写,以下划线分隔每个单词,例:
define( 'WEBSITE_NAME', '名称' );
define( 'WEBSITE_URL',  '地址' )
数组变量命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,例:
$scope_array  = array();
$book_id_array = array();
对象变量命名
使用英文名词、动词,以下划线作为单词的分隔,可以完整采用类名或是简化类名,但是必须明确知道是什么类,所有字母均使用小写,在变量后加上_obj,例:
$user_obj   = new userAccount();
$pain_obj   = new paintingOrder();
类命名
使用英文名词,以大写字母作为词的分隔,其他的字母均使用小写,名词的首个字母使用小写,不使用下划线,例:
class userAccount{
 ...
}
方法命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,例:
class userAccount {
 function is_account_ok(){
  ...
 }
 function add_account(){
  ...
 }
}
方法中参数命名
使用英文名词、动词,以下划线作为单词的分隔,所有字母均使用小写,当内部应用需要赋值的时候可以给参数赋默认值,例:
class userAccount {
 var $account_name = '';
 var $input_array  = '';

 function is_account_ok( $account_name = '' ){
  $this->account_name = $account_name;
  ...
 }
 function add_account( $input_data = '' ){
  $this->input_array = $input_data;
  ...
 }
}
大括号{}规则
将大括号放置在关键词后方,例:
if ( $condition ){
 ...
}
代码缩进规则
使用制表符缩进(TAB键)或四个空格。如果缩进层数大于四的时候,请重新设计该项业务逻辑的算法。
if .. else ... 规则
通常最好有一个else块以用于处理未处理到的或未知的其他情况,即使条件处理语句
只有一个也必须使用大括号{},例:
if ( $condition1 ){
 ...
} else if ( $condition2 ){
 ...
 ...
} else{
 ...
}
尽可能避免以下使用方式,例:
if ( $condition1 )
 ...
else
 ...
switch规则
每个case块结束处必须加上break,而default总应该存在处理未知情况,例:
switch( $condition ){
 case 'user':
  ...
  break;

 case 'type':
  ...
  break;

 default:
  ...
  break;
}
声明定位规则
声明代码块需要对齐,且初次使用变量时需要初始化,例:
var $tableName      = '';
var $databaseObject = '';
尽量不使用以下方式,例:
var $tableName;
var $accuntName = '';
var $databaseObject = '';

方法返回操作
所有类方法必须有返回值,除结果简单外返回true或者false之外,其它方法应返回不同的值
以交作流程进一步处理。

其他注意事项
html的form表单各个元素名称与数据库字段尽量保持一致。
不要采用缺省方法测试非零值,必须显式测试,例:
if ( $this->IsAccountOk() != false ){
 ...
}else{
 ...
}


尽量不要使用三元逻辑符 ? :,但对变量的赋值除外,例:
$_GET['act']   = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';
统一使用,禁止使用格式。
对于get、post类型变量,系统会转成对应的变量,直接调用变量名称即可,系统已经进行安全过滤,例:
get:  inde.php?action=cart
程序中可以调用$action结果为cart
尽可能使用单引号''而不是双引号"",在需要加入变量或是写sql语句除外。
php文件中绝不能出现html语句,如果实在无法解决尽量少用,考虑到模板的兼容性,html文件中尽可能避免出现php语句。
通常每个方法只执行一项逻辑动作事务,所以对它们的命名应该清楚的说明它们是做什么的:用email_error_check()代替error_check()。请注意命名不要与系统方法冲突。
程序注释
程序类或是方法在编写注释到时候应当参考一下方法
 /**
 *  分页预处理函数
 *  sql  SQL语句
 *  page  当前页数
 *  limit 每页显示的数量
 *  maxs  查询总数
 */
 function limit($sql,$page='0',$limit=10,$maxs=''){ }
逻辑语句注释通常采用//方式当注释内容过多采用上面的方式,例:
//用户检测
if( $check_obj->username( $username ) == true ){ … }

/** 检测购物车中是否存在数据,
如果没有数据则进行跳转处理。
*/
if( $shop_cart_obj->check() ==true ){ … }

数据库规范
数据库名称应该由概述项目内容的小写英文名词组成,以下划线分隔单词,避免跨平台时可能出现的大小写错误。
数据表名称应该由物件对象名称的小写英文名词组成(尽可能对应系统中的业务类名称),
以下划线分隔单词,避免跨平台时可能出现的大小写错误。
数据表的字段应避免使用varchar、text等不定长的类型,时间信息的字段使用int类型存储。
查询数据连接多表时各资源应该使用全名称,即tableName.fieldName,而不是fieldName。
SQL语句应尽可能符合ansi92标准,避免使用特定数据库对SQL语言的扩充特性。
开发结束后,必须针对SQL查询语句的条件语句部分(where)添加索引,须匹配多个条件的应该使用聚合索引。
严禁盲目添加索引,避免减慢数据插入的速度、增大占用空间及减慢查询速度。
当数据库(表)发生结构性变化时须登记保存;日常须定时(不超过三个工作日)备份数据库结构及其数据。

SVN开发注意事项
采用代码仓库后,在开发前必须先更新代码,保证代码不产生冲突,修改完成的代码必须增加注释,此次修改增加了什么功能或是修改哪里的代码行号或是具体功能。
产生冲突后首先将自己修改的代码移动到别处,在更新开发包到最新版本,然后将自己修改的代码与最后更新的代码比对,没有问题后在覆盖或是提交。

开发文档
开发过程中应用到的技术或是文档,如果没有存储地方可以考虑在根目录建立docs目录用于存放说明文档、开发文档、测试代码等。
编码规范
为了考虑程序代码通用性以及对各种语言的兼容性,系统将采用UTF-8编码开发。

例外
当采用其他class使用的时候由于涉及问题过多可以可以考虑直接应用,在不精通或是没有经过详细测试的类库需要进行测试才可以采用
来至php100

你可能感兴趣的:(张恩民谈PHP代码开发规范(文字版))