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

php开发规范
文件格式
    对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>"。
    使用四个空格代替制表符TAB,保证跨客户端编程器软件的灵活性【编辑器设置】。
    每行代码若超出了屏幕宽度,需要手动强制换行,增加可读性。
    每行结尾不允许有多余的空格,删除文件末尾空格,但是末尾应该空一行【编辑器设置】。
    请将编辑器设置对所有程序使用UNIX格式保存。

命名约定
1. 常量定义全部为大写,可使用_连接符

例如:
define('TEST', 'Hello World!');
const TEST = 'Hello World!';

2. 变量使用小写字母+下划线组成,其中private和protected变量要使用_前缀

例如:
public $per_page = 10;
protected $_user = null;
private $_db = null;

3. 函数名使用小写字母+下划线组成

例如:function get_client_ip();

4. 类名和方法名采用“驼峰法命名”,首字母小写,其后每个单词首字母大写,不允许使用下划线,并且加上特定的修饰符,名字采用“动词+宾语”的形式,不允许出现拼音,长度不宜超过5个单词,尽量描述清楚方法的作用

例如:
public function getUserInfo();
get(动词)UserInfo(宾语)

5. 参数名采用“驼峰法命名”,参数个数不宜超过5个,其他的请使用数组形式
6. 注释采用PHPDoc形式,明确方法用途和参数含义

例如:
/**
* addData
* 添加数据
*
* @param  integer $uid  用户ID
* @param  array   $data 分享内容
* @return boolean
*/

代码规范
1. 当一个字符串是纯文本组成的时候(即不含有变量),以单引号(')作为定界符。
2. 变量替换中的变量只允许用 {$+变量名} 的形式

例如:$greeting = "Hello {$name}, welcome back!";

3. 连接符“.”,“=”和其他运算符中间使用空格,增加可读性

例如:
包括,在比较运算符(>、<、>=、<=、==、===、!=、<>、!==)、赋值运算符(=)、数学运算符(+、-、*、/、%)、位运算符(&、|、^、~、>>、<<)、逻辑运算符(!、&&、||)、冒号(:)、
问号(?)、字符串连接运算符(.)、字符串连接赋值运算符(.=)前后,以及左括号(()前(函数调用例外)、逗号(,)后请使用空格进行间隔。
echo 'My name is' . $name;
$name = 'bosnzt';
$num ++;

4. 方法和函数中的参数使用逗号+空格“, ”方式隔开,()与{中间要有空格,与方法名之间不能有空格,{和方法名保持在同一行,方法与方法之间也要空一行

例如:
public function addData($uid, $data = array()) {
    // TODO
}

5. array 类型使用逗号+空格“, ”方式隔开,关联数组尽量分成多个行,并且保证每行的键与值的对齐,以保持美观,“=>”两边要有空格

例如:
$data = array(1, 2, 3);
$data = array(
    'name' => 'bosnzt',
    'uid'  => '100000',
);

6. 无论是if、for、foreach、while、do while 等等,都必须使用{},并且不能在同一行,}结束之后都要空一行,里面的条件使用逗号+空格“, ”方式隔开,且保持缩进

例如:
if (!$uid) {
    // TODO
}

for ($i; $i< 100; $i ++) {
    // TODO
}

foreach ($data as $key => $val) {
    // TODO
}

7. "switch" 语句的内容必须以四个空格缩进,"case" 条件控制的内容必须再加四个空格进行缩进

例如:
switch ($indentedSpaces) {
    case 2:
        echo "错误";
        break;
    case 4:
        echo "正确";
        break;
    default:
        break;
}

8. 单行注释//和文字要用空格隔开,和代码头部对齐,并且和上行代码空一行,多行注释*和文字用空格隔开

例如:
/*
* 1、多行注释尽量用来描述逻辑,防止以后忘记了一些重要逻辑
* 2、或者在开发过程中有些逻辑很复杂,在自己很难理清楚的情况之下,先将逻辑写在多行注释里,有助于在开发的时候不会乱
*/
$name = $web_id ? '网页' : '个人';

// 重新赋值,与上行代码保持空行
if (!$uid) {
    $name = 'Tom';
}

9. SQL关键词语大写,其他使用小写

SELECT field1 AS something, field2, field3
FROM table a, table b
WHERE (this=that) AND (this2=that2)

10. if/foreach/for嵌套尽量不要超过4层,超过4层嵌套,可读性非常的差,绝大多数情况都是可以优化的
11. 方法中的代码行数控制在80行之内,多出的请尽量拆分成多个子方法

PHP 5.3
新特性
1.添加了命名空间的支持.
2.添加了静态晚绑定支持.
3.添加了跳标签支持.

<?php
goto a;
echo 'Foo';

a:
echo 'Bar';
?>

4.添加了原生的闭包(Lambda/匿名函数)支持.

<?php
array_map(function closure($arg) use ($var,....) {}, $array);

5.新增了两个魔术方法, __callStatic(动态访问静态方法变为可能.) 和 __invoke(对象可以被执行).

<?p