良好的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 或 $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'
有好的建议,请在下方输入你的评论
欢迎访问个人博客 https://guanchao.site