[转]编码和命名规范
编码规范
1、对于类、函数、变量均使用驼峰方式命名。
2、使用PHPStorm作为IDE。编码后通过 ctrl+alt+L来格式化代码,如果使用其他编辑器则需要保持风格一致。
主要是
a、用4个空格替代tab
b、class function 的大括号要求换行,而if while switch的大括号不要换行1
2
3
4
5
6
7
8
9
10
11class foo
{
function get()
{
if ($a == 1) {
} else {
}
}
}
c、不要使用2个及以上的空行
d、单行的if while 也需要 花括号1
2
3
4
5if($a == 1) return false;//错误
if($a == 1) {
return false;
} //正确
e、方法和方法之间,留1个空行,不要粘在一起。
3、任何项目,请事先封装好以下函数
a、输入参数过滤,解决$_GET[‘a’] 的notice问题。
b、URL 构建函数或url构建类,统一生成网站的URL,或者定义好相关常量
c、全局变量管理函数或者全局变量管理类,禁止使用$GLOBALS,可以使用静态变量来达到全局操作的目的。
4、命名应该符合变量、函数的实际意义
例如:$user $thread $product
禁止在生存周期超过7行的代码中使用 $tmp
任何时候不能用 $a $bbb $c 这种无意义变量
循环体超过7行 的不能用 foreach($datas as $k=>$v) 应该具体指定$v 的名字,如果key有意义也应当指定。1
2
3
4
5
6
7
8
9foreach ($users as $k => $user) {
// 1
// 2
// 3
// 4
// 5
// 6
// 7
}
其他有关命名的规范可以参考 命名规范 一文
5、类函数
public private static protected final 限定字符:
public 不可省略
public static function methodName()
public function methodName()
private function _methodName()
protected function methodName()
私有化函数 必须用下划线开头
而保护方法 前后各加一个下划线
6、文件编码 UTF 8 无 bom 格式 单个php文件结尾不要写上 ?>
7、注释:
没有意义的注释不要写:比如:“这是一个函数” 它有一个方法叫做 “*”1
2
3
4
5
6/**
* 下面这个注释:首先dir已经标示这是一个路径,其次,它的描述来自IDE默认,完全无意义。
* Enter description here ...
* @var string
*/
public $baseDir = '';
必须给返回值增加类型说明,不可省略1
2
3/**
* @return int|bool
**/
不要在注释的前后留空行,下面是个反例1
2
3
4
5/**
*
* 注释
*
**/
如果没有说明文字,要么加上文字,要么去掉注释:
对于参数的说明注释是必须的,不可以省略1
2
3
4
5
6
7
8
9/**
* @params $count
**/
//上面一个就是没有说明文字
/**
* @params $count 用户数量
**/
注释和被注释代码间不要加空格1
2
3
4
5
6
7/**
* 从mc中返回用户昵称
**/
public function getNickFromMc()
{
//...
}
命名规范
1、变量命名
典型的变量命名
数组:$userList $threadList $productList 非常适合用于从数据库fetch出来的数据或者redis,mc出来的数据。我们可能原先喜欢用$users $threads 现在不再鼓励使用。
对象:$userObj $threadObj 一般用于new 或者 instance 的函数
一维数据:1
$userInfo = $userList[0];
字段名:例如 $userName = $userList[0][‘user_name’]; 从数据库出来的字段名再赋值改为驼峰命名法。
计数器:$userCount = $db->count(); 一定是整型
条件变量:$cond 用于数据库查询 , select from $cond; 没有第二种写法。
分页每页的页数:$limit 鉴于 $perpage $prepage 容易拼写错误,统一使用limit
分页和列表打包在一起的数据:array(‘page’=>array(),’data’=>array()) 命名为 **ListInfo 比如productListInfo
2、函数命名
过滤类函数:类似我们喜欢写:ifLogin isLogin needLogin checkLogin 。现在统一用check。产品库存 checkStock是否过期 checkTimeout密码长度是否正确 checkPasswordLength正常来讲,这些函数返回true表示验证通过。否则不通过。
数据库提取数据:可能返回二维数组,一维数组,甚至单个值二维数组 fetchUserList fetch + 主体 + List一维数组 fetchUser fetch + 主体单个值 fetchUserStatus fetchUserPassword fetch + 主体 + 说明字段单个值 countUser countUserOnline countUserByReplyId count 返回单个值
数据更新数据updateUserName update + 主体
mulitUpdateUserName 可能更新1条以上数据
数据库删除数据 deleteUser mulitDeleteUser
数据库创建数据 createUser mulitCreateUser以上数据库命名,如果是在对象类中,可以省略主体来减少代码,提高阅读效率:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35class user
{
//省略user
public function create($userInfo)
{
}
//不能省略具体字段名
public function updateUserName($userName)
{
}
//更新多个字段
public function update($info)
{
}
public function delete($uid)
{
}
public function fetchList($fields, $cond)
{
}
}
$userObj = new User();
$userObj->create($userInfo);
$userObj->delete($uid);
$userObj->fetchList('*', $cond);
$userObj->updateUserName($userName);
3、常量大写
CDN_URL
4、表名使用tbl作为前缀或者table作为前缀
$tblUser