编码规范

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
11
class foo
{

function get()
{

if ($a == 1) {

} else {

}
}
}

c、不要使用2个及以上的空行

d、单行的if while 也需要 花括号

1
2
3
4
5
if($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
9
foreach ($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
35
class 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