Heim >php教程 >php手册 >PHP开发规范!

PHP开发规范!

WBOY
WBOYOriginal
2016-06-06 19:56:351320Durchsuche

一、规范前言篇 标准化不是特殊的个人风格,它让程序员可以了解任何代码,弄清程序的状况;新人可 以很快的适应环境;防止新接触php的人一次次的犯同样的错误;在一致的开发环境下, 可以减少人们犯错的机会。本规范的标准在绝对多数应用上为仿照java技术体

一、规范前言篇

标准化不是特殊的个人风格,它让程序员可以了解任何代码,弄清程序的状况;新人可
以很快的适应环境;防止新接触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';

统一使用,禁止使用 ?>格式。

对于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:
* unixdotnetyjx_hao123@163.com
* Modifications:
* 2004-08-18 09:15
* 添加db_insert_id()方法
* unixdotnetyjx_hao123@163.com
* See: 参照说明
*/

class Database
{
 ……
}

类方法的注释

/*
* Purpose:
* 取得上一步数据库insert操作产生的id
* Method Name:
* getInsertId()
* Parameter:
* Return:
* int
* Author:
* unixdotnet yjx_hao123@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet yjx_hao123@163.com
* See: 参照说明
*/

function getInsertId()
{
 ...
}

类属性的注释

class Database
{
 /*
 * Purpose:
 * 连接数据库所需的用户名
 * Attribute Name:
 * $databaseUserName
 * Type: string
 * Author:
 * unixdotnet yjx_hao123@163.com
 * Modifications:
 * 2004-08-18 09:15
 * 修改原因
 * unixdotnet yjx_hao123@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中首尾加单引号就行,甭怕错。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn