日期:2014-05-17  浏览次数:20371 次

PHP编码规范2
1 介绍

       为了更好的提高开发的工作效率,保证开发的有效性和合理性,并最大程度的提高代码的可读性和可重复利用性,制订此规范。本规范包含了PHP开发时程序编码中代码缩进规则、控制结构、函数调用、函数定义、注释、包含代码、PHP标记、文件头的注释块、CVS标记、URL样例、常量命名等方面的规则。


1.1 标准化的重要

标准化问题的确在某些方面上让每个人头痛,让人人都觉得大家处于同样的境地。但是这往往是因为对标准化的误解。标准化不是束缚人,他是为了在大型开发过程中,能够提供项目整体的质量与开发进度。也许有人会说,恩,我不喜欢束缚,这么做会约束我的创造力。如果说你的创造力仅仅在命名,格式(而这恰恰是规范的主要内容)这样的表面层次,那么把你的创造力扔掉吧,没人喜欢这样的创造力。
1.2 优点

当一个项目尝试着遵守公用的标准时,会有以下好处:

· 程序员可以了解任何代码,弄清程序的状况

· 新人可以很快的适应环境

· 防止新接触php的人出于节省时间的需要,自创一套风格并养成终生的习惯

· 防止新接触php的人一次次的犯同样的错误

· 在一致的环境下,人们可以减少犯错的机会

· 程序员们有了一致的敌人
1.3 改进

规范并不是一成不变的,如果你觉得规范缺少东西或者有些不合适的地方,提出来,也许项目管理者会考虑加入,记住,任何项目都取决于团队合作的努力。
1.4 实施

一般情况下,规范的实施是由技术负责人或者项目经理执行和监督的。但是最好的方法还是在开发团队中达成共识,变成一种文化的存在。
2 命名规则

命名是程序规划的核心。名字就是事物在它所处的生态环境中一个长久而深远的结果。总的来说,只有了解系统的程序员才能为系统取出最合适的名字。如果所有的命名都与其自然相适合,则关系清晰,含义可以推导得出,一般人的推想也能在意料之中。
如果你发觉你的命名只有少量能和其对应事物相匹配的话, 最好还是重新好好再看看你的设计。
2.1 文件命名

文件名采用C GNU的惯例,所有的字母使用小写字母,使用`_`分割单词。

例如:

news_list.php



文件命名上有些几乎是约定俗成的单词,比如admin前缀表示是后台管理的文件名,inc.php后缀则表示包含文件或者类库文件,class.php后缀表示类库文件等等。config.php表示配置文件等。

例如:

admin_user.php

data.inc.php

user.class.php




2.2 类命名

· 使用大写字母作为词的分隔,其他的字母均使用小写
· 名字的首字母使用大写
· 不要使用下划线(`_`)
例如
class NameOneTwo
class Name



注意:

· 在为类(class )命名前首先要知道它是什么。如果看到类名,你还是想不起这个类是什么的话,那么你的设计就还做的不够好。
· 超过三个词组成的混合名是容易造成系统各个实体间的混淆,再看看你的设计,尝试使用(CRC Session card)看看该命名所对应的实体是否有着那么多的功用。
· 对于派生类的命名应该避免带其父类名产生关系,一个类的名字只与它自身有关,和它的父类叫什么无关。
· 有些后缀名是几乎是约定俗成的,例如:如果你的系统使用了代理(agent ),那么就把某个部件命名为“下载代理”(DownloadAgent)用以真正的传送信息。

    当然,这些约定俗成的词汇不会自动出现,需要小组人员的不断总结。


2.2.1 缩写词不要全部使用大写字母



· 无论如何,当遇到以下情况,你可以用首字母大写其余字母小写来代替全部使用大写字母的方法来表示缩写词。
使用: GetHtmlStatistic.
不使用: GetHTMLStatistic.
理由
· 当命名含有缩略词时,人们似乎有着非常不同的直觉。统一规定是最好,这样一来,命名的含义就完全可以预知了。
举个NetworkABCKey的例子,注意C是应该是ABC里面的C还是key里面的C,这个是很令人费解的。有些人不在意这些,其他人却很讨厌这样。所以你会在不同的代码里看到不同的规则,使得你不知道怎么去叫它。
例如
class FluidOz // 不要写成 FluidOZ
class GetHtmlStatistic // 不要写成 GetHTMLStatistic
2.3 类库命名



· 目前命名空间正在越来越广泛的被采用,以避免不同厂商和团体类库间的类名冲突。
· 当尚未采用命名空间的时候,为了避免类名冲突,一般的做法是在类名前加上独特的前缀,两个字符就可以了,当然多用一些会更好。
例如
John Johnson的数据结构类库可以用Jj做为前缀,如下:
class JjLinkList
{
}
另一种折中方式是建立包含类库目录(事实上Java也是这么做的),以不通的目录代表不同的命名空间。
例如
Microsoft的数据库相关类库可以在:
/classes/com/Microsoft/ Database/DbConn.php
Apache的数据库相关类库可在:
/classes/org/apache/Database/DbConn.php


2.4 类属性命名

· 类属性采用C GNU的惯例,所有的字母使用小写字母,使用`_`分割单词。

例如
class NameOneTwo
{

function var_abc() {};

function error_number() {};

var $var;

var $error_number;

var $name;

}


2.5 方法命名

·函数名字采用C GNU的惯例,所有的字母使用小写字母,使用`_`分割单词。

例如
class NameOneTwo
{

function do_it() {};

function handle_error() {};

}



· 通常每个方法都是执行一个动作的,所以对它们的命名应该清楚的说明它们是做什么的:用check_for_errors()代替error_check(),用dump_data_to_file()代替data_file()。这么做也可以使功能和数据成为更可区分的物体。
· 有时后缀名是有用的:
o Max - 含义为某实体所能赋予的最大值。
o Cnt - 一个运行中的计数变量的当前值。
o Key - 键值。
例如:retry_max 表示最多重试次数,retry_cnt 表示当前重试次数。
· 有时前缀名是有用的:
o Is - 含义为问一个关于某样事物的问题。无论何时,当人们看到Is就会知道这是一个问题。
o Get - 含义为取得一个数值。
o Set - 含义为设定一个数值
例如:is_hit_retry_limit。




2.6 方法中参数命名



·函数名字采用C GNU的惯例,所有的字母使用小写字母,使用`_`分割单词。



例如
class NameOneTwo
{

function start_your_engines(

&$some_engine,

&$another_engine);

}
2