PHP编码规范

1,579 阅读2分钟

良好的PHP编码规范能让你的代码看起来更加的优雅,清晰的结构有助于提高可读性并减少工作量。

一:编码格式

文件应该使用 Unicode (UTF-8) 编码保存,不要使用 字节序标记(BOM) 。与 UTF-16 和 UTF-32 不同,UTF-8 编码的文件不需要指明字节序,而且 字节序标记(BOM) 在PHP中会产生预期之外的输出,阻止了应用程序设置它自己的头信息。

如果保存带BOM的编码,会在文件头输出类似ufeff的内容。这样是不好的,会导致JSON等数据无法正常读取。

二:PHP闭合标签

纯PHP文件,不要写 ‘?>’ 闭合标签。保持最后一行留空即可。

PHP的闭合标签可能会在一些框架中造成编码问题。

这个一定要注意,否则出了问题可能没有办法锁定问题的来源。

例如:

<?php
    phpinfo();

三:代码缩进

使用Tab键来缩进,每个Tab键长度设置为4个空格;

四:代码换行

为了保证代码的可读性。请注意代码换行。

例:

$dataList = DB::select("
SELECT p1.id,p1.personal_id,p2.name ,p2.id AS userid
          FROM student_group_detail p1
         LEFT JOIN user p2 ON p1.userid=p2.id
         WHERE p1.grpid = '{$grpid}'
         ORDER BY p1.userid,p1.personal_id ASC");

五:命名规则

1:类命名规则:使用大驼峰式(StudlyCaps)写法;

2:方法命名规则:(类的)方法名 使用小驼峰(cameCase)写法;

3:函数命名规则:函数名使用 小写字母 + 下划线 写法,如 function http_send_post();

4:变量命名规则:变量名 使用小驼峰写法,如 $userName;

六:代码注释

良好的代码注释,方便其他同事更快捷的阅读你的代码。

1:类注释:要标记好创建人,类的功能,及创建时间。

/**
 * @name 微信小游戏数据统计类
 * @author camellia
 * @date 20200703
 */
class ReckonController extends AppHttpControllerscommonCommonController
{
}

2:方法注释:要标记好方法功能,创建人,创建时间,参数含义,及返回值

/**
     * @name 获取微信小游戏统计页列表
     * @author camellia
     * @date 20200703
     * @param id 用户群组ID student_group_detail表外键
     * @return json
     */
    public function getWxGameReckonList()
{
}

3:单行注释

// 定义一个空数组,用来存储返回值
        $group = array();
        // 计算数组长度
        $dataNum = count($dataList);

4:多行注释,这里有一个小技巧。

/*if (!isset($_REQUEST['id'])) //1-2-45 分割样式
        {
            $result['code'] = -1;
            $result['msg'] = '系统故障-参数携带不全';
            return $result;
        }
        $grpid = strim($_REQUEST['id']);//*/

注意看我结束位置的注释写法,这样写的好处是,解除注释的时候,你只需要将开头的/*删除就可以了。后边的可以不用理会。

5:一个项目多人协作开发,不可避免的会出现组员之前互相交叉改代码的一个情况,修改别人的代码的时候,注释的格式:

标注添加时间,并标注为何添加。

// ========================================================
// add by camellia 20200703 微信小游戏统计
// 获取微信小游戏统计列表
Route::get("/getWxGameReckonList"'WxGameReckonController@getWxGameReckonList');
// 获取微信小游戏用户关卡详情
Route::get("/getUserLevelDetail"'WxGameReckonController@getUserLevelDetail');

七:控制结构

这里的控制结构主要指if-elseif-else 与 switch-case

(1):if-elseif-else

<?php
if ($expr1) { // if 与 ( 之间有一个空格,) 与 { 之间有一个空格
 
} elseif ($expr2) { // elesif 连着写,与 ( 之间有一个空格,) 与 { 之间有一个空格
 
} else { // else 左右各一个空格
 
}

(2):switch-case

<?php
switch ($expr) { // switch 与 ( 之间有一个空格,) 与 { 之间有一个空格
    case 0:
        echo 'First case, with a break'// 对齐
        break// 换行写break,也对齐。
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}

在 "switch" 语句中应该总是包括 "default" 控制。

八:变量声明及使用

1:普通变量:声明此类变量的时候,用描述性的变量的命名,采用小驼峰式写法。像 i 或 i 或 n 等等都是不建议使用的。

2:全局变量:声明此类变量的时候,需要给其附默认值。

3:静态变量:其是存储在服务器的运行内存中,因此不宜声明过多,容易造成内存崩溃。

4:常量:命名有意义,采用大写字母加下划线的形势命名。

九:业务模块

1:涉及到多个数据表 更新/添加 操作时,最外层要用事务,保证数据库操作的原子性;
2:业务逻辑统一封装到 Mode层;
4:控制器只做URL路由,不要当作 业务方法 调用;
5:控制器层不能出现SQL操作语句,如 ThinkPHP框架的 where()、order() 等模型方法,即,控制器中,不要出现类似这样的SQL语句:D('XXX')->where()->order()->limit()->find(); where()、order()、limit() 等SQL方法只能出现在 Model层

十:开发注意事项

1:一个PHP文件中,至允许声明一个类。

2:不允许使用三元运算符来进行判断。

3:大括号的开始必须在类名的下一行顶格。例如:

class Think
{
    // ...
}

4:函数或方法的初始大括号应该在函数声明的下一行顶格。例如: 

function get_client_ip()
{
    // …
}

5:引用只允许定义在函数参数中,实时传递引用是禁止的。例如:

// 引用定义在函数参数-允许的
function defineRefInMethod(&$a)
{
    $a 'a';
} 
defineRefInMethod($b);
echo $b// 'a'
// 实时传递引用-禁止的
function callTimePassRef($a)
{
    $a 'a';
}
callTimePassRef(&$c);
echo $c// 'a'

有好的建议,请在下方输入你的评论

欢迎访问个人博客 guanchao.site