一、规范前言篇
标准化不是特殊的个人风格 它让程序员可以了解任何代码 弄清程序的状况;新人可以很快的适应环境;防止新接触php的人一次次的犯同样的错误;在一致的开发环境下 可以减少人们犯错的机会。本规范的标准在绝大多数应用上仿照java技术体系 因为java技术体系以其众多成功的案例成为大部分计算机应用层的工业标准 此外便于日后公司向java技术体系转型。
二、命名定义篇
局部变量命名
使用英文名词、动词 以大写字母作为单词的分隔 其他的字母均使用小写 单词的首个字母使用小写 不使用下划线 例:
$repeatCount = '';$delUserSql = '';
全局常量命名
使用英文名词、动词 所有字母都使用大写 以下划线分隔每个单词 例:
define( 'WEBSITE_NAME', '名称' );define( 'WEBSITE_URL', '地址' )
数组变量命名
使用英文名词、动词 以大写字母作为单词的分隔 其他的字母均使用小写 单词的首个字母使用小写 不使用下划线 以字符串Array为后缀 例:
$scopeArray = array();$bookIdArray = array();
静态变量命名
使用英文名词、动词 以大写字母作为单词的分隔 其他的字母均使用小写 单词的首个字母使用小写 不使用下划线 以字符串Static为后缀 例:
function getDirectoryFile(){ static $fileArrayStatic = ''; static $fileNumStatic = ''; ...}
对象变量命名
使用类名称为变量前缀 所有字母都使用大写 以字符串_OBJECT为后缀 例:
$USERACCOUNT_OBJECT = new UserAccount();$PAINTINGORDER_OBJECT = new PaintingOrder();
类命名
使用英文名词 以大写字母作为词的分隔 其他的字母均使用小写 名词的首个字母使用大写 不使用下划线 例:
class UserAccount{ ...}class PaintingOrder{ ...}
方法命名
使用英文名词、动词 以大写字母作为词的分隔 其他的字母均使用小写 单词的首个字母使用小写 不使用下划线 例:
class UserAccount{ function isAccountOk() { ... } function addAccount() { ... }}
方法中参数命名
使用英文名词、动词 以大写字母作为词的分隔 其他的字母均使用小写 单词的首个字母使用小写 不使用下划线 例:
class UserAccount{ function isAccountOk( $accountName ) { $this->accountName = $accountName; ... } function addAccount( $inputDataArray ) { $this->inputArray = $inputDataArray; ... } var $accuntName = ''; var $inputArray = '';}
类属性命名
使用英文名词、动词 以大写字母作为词的分隔 其他的字母均使用小写 单词的首个字母。
使用大写 不使用下划线 对于类属性为某个对象变量 则以字符串Object为后缀 例:
class UserAccount{ function IsAccountOk() { ... } function AddAccount() { ... } var $tableName = ''; var $databaseObject = '';}
三、语法书写篇
大括号{}规则
将大括号放置在关键词下方的同列处 例:
if ( $condition ){ ...}
不使用此种方式:
if ( $condition ) { ...}
代码缩进规则
使用制表符缩进(TAB键)或四个空格。如果缩进层数大于四的时候 请重新设计该项业务逻辑的算法。
小括号()规则
不要把小括号和关键词、方法名、方法参数紧贴在一起 要用一个空格分隔 例:
if ( $condition ){ ...}function addAccount( $inputDataArray ){ ...}
由于小括号与关键词等紧贴容易被看成是一体 因此不要使用以下方式 例:
if ($condition) { ...}function addAccount($inputDataArray){ ...}
if .. else ... 规则
通常最好有一个else块以用于处理未处理到的或未知的其他情况 即使条件处理语句只有一个也必须使用大括号{} 例:
if ( $condition1 ){ ...}else if ( $condition2 ){ ...}else{ ...}
尽可能避免以下使用方式 例:
if ( $condition1 ) ...else ...
switch规则
每个case块结束处必须加上break 而default总应该存在处理未知情况 例:
switch( $condition ){ case $value1: ... break; case $value2: ... break; default: ... break;}
声明定位规则
声明代码块需要对齐 且初次使用变量时需要初始化 例:
var $tableName = '';var $databaseObject = '';
不使用以下方式 例:
var $tableName;var $accuntName = '';var $databaseObject = '';
四、其它说明篇
所有类方法必须有返回值 除结果简单外返回true或者false之外 其它方法应返回不同的值。
以交作流程进一步处理。
html的form表单统一不设置submit按钮的名称属性(name)。
html的form表单各个元素名称与数据库字段保持一致。
每行一个语句。
不要采用缺省方法测试非零值 必须显式测试 例:
if ( false != $this->IsAccountOk() ){ ...}else{ ...}
不要使用以下方式 例:
if ( $this->IsAccountOk() ){ ...}else{ ...}
不要使用三元逻辑符 ? : 但对变量的赋值除外 例:
$_GET['act'] = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';
统一使用<?php ?> 禁止使用<? ?>格式。
对于get、post、session类型变量 必须使用$_GET、$_POST、$_SESSION方式定义和调用。
尽可能使用单引号''而不是双引号''。
使用完毕后的数组变量、对象变量、查询集合必须马上使用unset()、free_result()释放资源。
一个php文件只能包含一个类定义编码 以类名称作为文件名称。
php文件中绝不能出现html语句 html文件中尽可能避免出现php语句。
html文件必须通过w3c的html4检测认证(http://validator.w3.org/)。
如果发觉您在程序中的命名只有少量能和其对应事物相匹配的话 请重新设计系统。
在为类命名前首先要知道它是什么。如果通过类名提供的线索 您还是想不起这个类是什么的话 那么您的设计是做得不够好。
超过三个单词组成的混合名是容易造成系统各个实体间的混淆 请重新设计类。
通常每个方法只执行一项逻辑动作事务 所以对它们的命名应该清楚的说明它们是做什么的:用checkForErrors()代替errorCheck() 用dumpDataToFile()代替dataFile()。
这么做使功能和数据成为更可区分的物体。
五、程序注释篇
类的注释
/** Purpose:* 作为通用接口访问数据库的类* Class Name:* Database* Author:* unixdotnetphpboke@163.com* Modifications:* 2004-08-18 09:15* 添加db_insert_id()方法* unixdotnetphpboke@163.com* See: 参照说明*/class Database{ ……}
类方法的注释
/** Purpose:* 取得上一步数据库insert操作产生的id* Method Name:* getInsertId()* Parameter:* Return:* int* Author:* unixdotnet phpboke@163.com* Modifications:* 2004-08-18 09:15* 修改原因* unixdotnet phpboke@163.com* See: 参照说明*/function getInsertId(){ ...}
类属性的注释
class Database{/** Purpose:* 连接数据库所需的用户名* Attribute Name:* $databaseUserName* Type: string* Author:* unixdotnet phpboke@163.com* Modifications:* 2004-08-18 09:15* 修改原因* unixdotnet phpboke@163.com* See: 参照说明*/var $databaseUserName; ...}
六、数据库应用篇
数据库的设计必须符合三个范式(极端要求常用高速时考虑单独设置记录表除外)。
数据库名称应该由概述项目内容的小写英文名词组成。
数据表名称应该由物件对象名称的小写英文名词组成(尽可能对应系统中的业务类名称)。
以下划线分隔单词 避免跨平台时可能出现的大小写错误。
数据表的字段应避免使用varchar、text等不定长的类型 时间信息的字段使用unix tiemstamp类型存储。
查询数据时禁止使用*通配符避免占用资源加速处理速度 尽量避免使用临时表。
查询数据连接多表时各资源应该使用全名称 即tableName.fieldName 而不是fieldName。
SQL语句应尽可能符合ansi92标准 避免使用特定数据库对SQL语言的扩充特性。
开发结束后 必须针对SQL查询语句的条件语句部分(where)添加索引 须匹配多个条件的应该使用聚合索引。
索引的组成应由左至右匹配条件语句的顺序。
严禁盲目添加索引 避免减慢数据插入的速度、增大占用空间及减慢查询速度。
每当数据库(表)发生结构性变化时须登记保存;日常须定时(不超过三个工作日)备份数据库结构及其数据。
1.给php变量赋值为字符串 尽量用单引号。单引号速度要快很多。
2.给php变量赋值时 值中带变量 就的用双引号了 双引号能自动解析变量 方便很多。
如$b=blue; $a="php$b"; echo $a;输出phpblue (单双引号各有千秋啊)
3. html内尽量用双引号 无论多长拿到php中首尾加单引号就行 甭怕错。
原文:http://www.phpboke.com/php-standard.html
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题