似梦似醒

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

/**********************************最近被命名弄得烦死了,找了个文章给大家分享一下,提升一下命名的知识*************************************/

 

PHP中 类、方法(函数)、变量、常量、文件的名称均应以简单易懂的单词的组成,如HelloWorld()比用HW()好,getUserName()比 gun()好。但也不宜过长,一般以两到三个单词组成。

对于大家均熟知的应用,也可采用一些更简单易记的缩写方式,比如redirectUrl(得到应该跳转到的地址),可以简写成g(),以方便调用。

在各种命名中,也可以加入个性化的前缀,比如Faps写的日志类,可以用FLog命名;iwind写的文件操作类,可以用IFile命名;这些前缀 一般要使用大写字母。

定义基础类、方法的时候,也可以借鉴其它语言(JSP,ASP…)中的具有相近功能的类命名方式。比如把各种请求处理类写作Request,把各种 文件操作处理类写作File。

总之,命名的原则是让整个开发团队易用、易记、易懂。

包的命名使用多个小写字母单词组成,并以下划线分割,比如:

ofc
x_y

用一个或多个单词组成,各个单词首字母大写,各单词之间无需连接符。比如

class GetUserInfo {

}

类一般需要有前缀用来避免冲突,一般可以用开发者的名字或者包的名字的简写:

class OfcChart {

}中的Ofc和class IXmlNode {

}中的I都是前缀。

函数

用一个或多个单词组成,单词之间使用下划线(_)分割,而且通常需要加前缀:

function if_array_sort($array, $asc = false) {

}函数的参数名参考变量的命名。

方法

方法的参数名参考变量的命名。

方法名

用一个或多个单词组成,除第一个单词的首字母小写外,其它各单词的首字母大写。比如

function userInfo() {

}

一些有名词意义的方法名也例外,首字母也有可能要大写。比如

function PHPServer() {

}因为PHP是 名词,而且通常全部写成大写字母,所以这里保留名词的形式。

再次提醒,方法命名中应该借鉴已经成熟的语言的已有的常见命名规则和命名 习惯,切忌自造生僻单词或者甚至使用拼音。

简化方法

方法名不宜过长,如:

class IController {
function getCurrentControllerFile() {

}
}看起来这个方法很完整地表达了它的意义,但实际上程序员在使用这个方法时必须要记忆和敲入更多的代码,增大了 工作量和错误概率,考虑到当前的方法所在上下文,该方法可以简化为:class IController {
function file() {

}
}这样既不影响用户理解(因为知道是在IController里执行这个方法),又方便了用户调用。

getter方法

getter方法可以用来获取对象的属性值,I-F中命名崇尚简单,已经极少使用getXxx的命名方法,更加偏向于使用简化的命名,以下是几个简 化的例子:

getName() ->name()
getAttributes() ->attrs()
insertItemAtIndex($index) ->insertAt($index)
getPrimaryKey() ->pk()

setter方法

如果是设置一个属性值,可以使用setXxx的命名方法:

function setParent($parent) {

}

is方法

isXxx用来判断某个属性值是否为真:

function isAbsolute() {
return true;
}

can方法

canXxx用来判断当前对象能否执行一项任务:

function canWrite() {
return true;
}

with方法

可以在方法中使用with表示根据什么取得什么:

function joinWithString($array, $delimString) {

}

by方法

和with一样,表示根据什么取得什么,比如:

function joinByString($array, $delimString) {

}

on方法

表示事件监听方法,比如IController中的onBefore()和onAfter():

function onBefore() {

}

function onAfter() {

}

do方法

表示执行操作,比如控制器中的所有动作都以do开头:

function doSave() {

}

as方法

将当前对象转换为另外一种数据格式的方法名一般使用as开头,比如:

function asArray() {
return array( "name" => $this->_name, "age" => $this->_age );
}

私有和保护方法

如果表示内部方法(不在类外面或方法库外被调用,比如private或protected方法),可 以用_(下划线)开头,比如

private function _setVar($name, $value) {
$this->name = $name;
$this->value = $value;
}

构造方法

但如果是构造方法的话,因为方法名要和类名一致,所以首字母也要大写:

class GetUserInfo {
function GetUserInfo() {

}
}

不过在PHP5 里我们多使用__construct来表示构造方法,所以上面的这个例子可以写成:

class GetUserInfo {
function __construct() {

}
}

变量

包括类属性,变量名都由一个或多个单词,以第一个单词首字母小写开头,其它单词首字母大写组成。比如

$varName, $userInfo;

另外,如果表示私有属性(private)的话,可以用_(下划线)开头,比如

var $_varName;
private$_varName;

常量

常量名由一个或多个单词组成,单词之有下划线分隔,且每个字母均为大写,比如

CLUB_USERNAME
CLUB_FORUM_NAME

模板变量命名

模板变量是嵌入在模板里等待程序替换的特殊变量,我们用一对花括号包含字母,下划线,数字组成一个模板变量,比如

{{username}}
{{club_forum_name}}

模板变量要使用非常易懂的单词,方便网页制作调试时理解,各个单词之间使用下划线分隔。

文件名

普通文件名由一个或多个单词组成,使用下划线分隔,比如

index.php
log_read.php

配置文件或其他特殊的文件名一般以下划线开头,比如:

_class.php
_config.php

类文件的名称应和类名称一致,如IXmlNode类文件名应该为IXmlNode.php

除类文件外,如无特殊情况,文件名中请不要使用大写字母,以免造成不必要的麻烦。

扩展名

扩展名字母一律小写,静态页面和模板页面用.html,动态页面用.php,缓存页用.cache.php,日志存放 文件用.log,SQL语句用.sql(严禁上传到服务器),数据存放用.dat, CSS文件用.css,JS文件用.js等等。

SQL

数据库名用 db_ 和 产品域名的二级域名组合,比如 club.mysite.com的数据库命名为 db_club,blog.mysite.com的数据库命名为db_blog

数据库表名用一或多个单词表示,单词之间由下划线分隔,比如

user_info
user_template

数据库字段名用一或多个单词表示,单词之间由下划线分隔,比如

user_id
submit_date

等。

下面是我们使用中的自己约定俗成的一些命名方法:

  • id - 表的主键字段
  • state - 当前记录的状态
  • created_at - 记录创建时间戳
  • updated_at - 记录更新时间戳
  • 关联的表名_id - 和别的表关联的外键字段
  • is_xxx - 判断性字段
  • has_xxx - 判断是否有某个特性的字段
  • xxx_date - 日期(如2009-02-25)
posted on 2012-10-31 16:58  人生如梦,梦如人生  阅读(487)  评论(0)    收藏  举报