一、基本约定
1、源文件
(1)纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> ;
(2)源文件中PHP代码的编码格式必须是无BOM的UTF-8格式;
(3)使用 Unix LF(换行符)作为行结束符;
(4)一个源文件只做一种类型的声明;
2、缩进
使用Tab键来缩进,每个Tab键长度设置为4个空格;
3、行
一行推荐的是最多写120个字符,多于这个字符就应该换行了,一般的编辑器是可以设置的。
4、关键字
PHP的关键字,必须小写,boolean值:true,false,null 也必须小写
5、命名
(1)类名使用大驼峰式(StudlyCaps)写法;
(2)类的方法名使用小驼峰(cameCase)写法;
(3)函数名使用 小写字母 + 下划线 写法,如http_send_post();
(4)变量名 使用小驼峰写法,如 $userName;
6、注释
(1)行注释使用//,// 后面需要加一个空格;
(2)函数注释参数名、属性名、标签的文本上下要对齐;在第一个标签前加一个空行;
7、空格
(1)赋值操作符(=,+= 等)、逻辑操作符(&&,||)、等号操作符(==,!=)、关系运算符(<,>,<=,>=)、按位操作符(&,|,^)、连接符(.) 左右各有一个空格;
(2)if,else,elseif,while,do,switch,for,foreach,try,catch,finally 等 与 紧挨的左括号“(”之间有一个空格;
(3)函数、方法的各个参数之间,逗号(”,”)后面有一个空格;
8、空行
(1)所有{ 紧挨着的下方,一定不是空行;
(2)同级代码的注释(行注释/块注释)前面,必须有一个空行;
(3)各个方法/函数之间有一个空行;
(4)namespace语句、use语句、clase语句之间有一个空行;
(5)如果 return 语句之前只有一行PHP代码,return 语句之前不需要空行;如果 return 语句之前有至少二行PHP代码,return 语句之前加一个空行;
(6)if,while,switch,for,foreach、try 等代码块之间以及与其他代码之间有一个空行;
9、其他
(1)涉及到多个数据表 更新/添加 操作时,最外层要用事务,保证数据库操作的原子性;
(2)Model层,只做简单的数据表的查询;
(3)业务逻辑统一封装到 Service层;
(4)控制器只做URL路由,参数校验,不要当作 业务方法 调用;
(5)控制器层不能出现SQL操作语句,如 ThinkPHP框架的 where()、order() 等模型方法,SQL方法只能出现在 Model层、Service层!
二、代码样式风格
1、命名空间(Namespace) 和 导入(Use)声明
(1)命名空间(namespace)的声明后面必须有一行空行;
(2)所有的导入(use)声明必须放在命名空间(namespace)声明的下面;
(3)一句声明中,必须只有一个导入(use)关键字;
(4)在导入(use)声明代码块后面必须有一行空行,然后才能声明class;
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\controller\Common;
class Demo
{
}
2、类(class),属性(property)和方法(method)
(1)继承(extends) 和实现(implement) 必须和 class name 写在一行。
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\controller\Common;
class Demo extends BaseController
{
}
(2)属性(property)必须声明其可见性,到底是
public 还是 protected 还是 private,不能省略
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\controller\Common;
class Demo extends BaseController
{
public $name = ‘救火队队长’;
protected $age = ’33’;
private $address = ‘中国北京’;
}
(3)方法(method),必须 声明其可见性,到底是
public 还是 protected 还是private,不能省略。如
果有多个参数,第一个参数后紧接“,” ,再加一个
空格,如果参数有默认值,“=”左右各有一个空格
分开
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\controller\Common;
class Demo extends BaseController
{
// 参数之间有一个空格。默认参数的“=”左右各有一个空格,) 与 { 之间有一个空格
public function getInfo($name = ”, $age = 0, $gender = 1)
{
// 方法主体部分
}
}
(4)当用到抽象(abstract)和终结(final)来做类声
明时,它们必须放在可见性声明 (public 还是
protected还是private)的前面。而当用到静态
(static)来做类声明时,则必须放在可见性声明的
后面
<?php
namespace app\admin\controller;
use app\BaseController;
use app\admin\controller\Common;
class Demo extends BaseController
{
// final放前面,static放最后
final public static function getInfo($name = ”)
{
// 方法主体部分
}
}
【综合参考示例】
<?php
// +———————————————————————-
// | najing [ 通用后台管理系统 ]
// +———————————————————————-
// | Copyright (c) 2020 http://www.najingquan.com All rights reserved.
// +———————————————————————-
// | Author: 救火队队长
// +———————————————————————-
namespace app\common\Model;
use think\Model;
/**
* 用户表 数据模型
*
* @package common\Model
*/
class UserModel extends Model
{
/**
* @var bool 是否初始化过
*/
protected static $init = false;
/**
* 根据Id 获取用户信息
*
* @param int $userId 用户Id
* @param string $field 显示字段
* @return array
*/
public function getByUserId($userId = 0, $field = ‘*’)
{
if (empty($userId)) {
return array();
}
$where = array(‘id’ => $userId);
$info = $this->field($field)->where($where)->find();
return $info;
}
}
https://mp.weixin.qq.com/s/Lej5TrDMX_fIUAWPsgWgVA