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