首页 > 帮助文档 > ThinkPHP框架

Thinkphp 开发规范

ThinkPHP8.0遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
目录和文件

    目录使用小写+下划线;
    类库、函数文件统一以.php为后缀;
    类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
    类(包含接口和Trait)文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
    类名(包括接口和Trait)和文件名保持一致,统一采用驼峰法命名(首字母大写);

函数和类、属性命名

    类的命名采用驼峰法(首字母大写),例如 User、UserType;
    函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip;
    方法的命名使用驼峰法(首字母小写),例如 getUserName;
    属性的命名使用驼峰法(首字母小写),例如 tableName、instance;
    特例:以双下划线__打头的函数或方法作为魔术方法,例如 __call 和 __autoload;

常量和配置

    常量以大写字母和下划线命名,例如 APP_PATH;
    配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert;
    环境变量定义使用大写字母和下划线命名,例如APP_DEBUG;

数据表和字段

    数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name字段,不建议使用驼峰和中文作为数据表及字段命名。


1. **基本编码原则**
   - **代码缩进与空格**
     - 统一使用4个空格进行缩进,避免使用制表符(Tab),这样可以保证代码在不同的编辑器和环境下具有一致的缩进效果。在运算符两侧、逗号后面等位置适当添加空格,以增强代码的可读性。例如:
       ```php
       $result = $a + $b;
       $array = [1, 2, 3];
       ```
   - **代码注释**
     - 对于复杂的代码逻辑、函数、类等要添加足够的注释。注释应该清晰明了,解释代码的功能、目的以及可能的注意事项。ThinkPHP支持多种注释风格,包括块注释(`/* */`)和行注释(`//`)。例如:
       ```php
       // 这个函数用于获取用户信息
       function getUserInfo($userId)
       {
           /*
            * 下面的代码通过模型查询用户信息
            * 首先实例化用户模型,然后调用查询方法
            */
           $userModel = new UserModel();
           $userInfo = $userModel->getUserInfoById($userId);
           return $userInfo;
       }
       ```
2. **控制器规范**
   - **继承关系**
     - 控制器类通常继承自`think\Controller`或其相关的抽象类,以获取基础的控制器功能,如视图渲染、请求处理等。例如:
       ```php
       namespace app\controller;
       use think\Controller;
       class UserController extends Controller
       {
           // 控制器方法
       }
       ```
   - **请求方法处理**
     - 对于不同的请求方法(GET、POST、PUT、DELETE等),可以通过在控制器方法名前添加对应的请求方法名(小写)来进行区分。例如,`getUserList`方法用于处理GET请求获取用户列表,`postUserInfo`方法用于处理POST请求提交用户信息。
   - **视图渲染**
     - 当需要渲染视图时,要遵循ThinkPHP的视图渲染规则。可以使用`return view('template_name', $data)`的方式来返回视图,其中`template_name`是视图模板的名称,`$data`是传递给视图的数据。例如:
       ```php
       public function getUserList()
       {
           $userList = $this->userModel->getUserList();
           return view('user/list', ['userList' => $userList]);
       }
       ```
3. **模型规范**
   - **模型定义与继承**
     - 模型类一般继承自`think\Model`,这样可以利用ThinkPHP提供的数据库操作方法。例如:
       ```php
       namespace app\model;
       use think\Model;
       class UserModel extends Model
       {
           // 模型属性和方法
       }
       ```
   - **数据库连接与表关联**
     - 如果需要指定模型对应的数据库表,可以通过`protected $table = 'table_name';`来定义。对于关联关系(如一对一、一对多、多对多),ThinkPHP提供了一系列的关联方法,如`hasOne`、`hasMany`、`belongsTo`、`belongsToMany`等。例如,定义一个用户模型和用户角色模型的一对多关系:
       ```php
       class UserModel extends Model
       {
           protected $table = 'users';
           public function roles()
           {
               return $this->hasMany('RoleModel', 'user_id');
           }
       }
       ```
4. **视图规范(以ThinkPHP自带模板引擎为例)**
   - **模板文件命名与存放位置**
     - 模板文件通常存放在`app/view`目录下,文件名采用小写字母加下划线的方式命名,如`user_list.html`。不同的控制器对应的视图可以存放在不同的子目录下,便于管理。
   - **模板语法**
     - 使用ThinkPHP的模板引擎语法进行数据展示和逻辑处理。例如,使用`{$variable}`来输出变量,`{if condition="..."}...{/if}`来进行条件判断,`{volist name="list" id="item"}...{/volist}`来进行循环遍历。例如:
       ```html
       <ul>
           {volist name="userList" id="user"}
               <li>{$user.name}</li>
           {/volist}
       </ul>
       ```
5. **数据库操作规范**
   - **查询构建器使用**
     - 尽量使用ThinkPHP的查询构建器来进行数据库操作,它提供了一种安全、高效的方式来构建SQL查询。例如,使用`Db::table('table_name')->where('condition')->select()`来进行查询。例如:
       ```php
       $userList = Db::table('users')->where('status', 1)->select();
       ```
   - **数据验证与过滤**
     - 在进行数据库插入和更新操作之前,要对数据进行验证和过滤,防止SQL注入等安全问题。ThinkPHP提供了数据验证器(`think\Validate`)来帮助完成这个任务。例如:
       ```php
       $data = [
           'name' => $input['name'],
           'email' => $input['email']
       ];
       $validate = new Validate([
           'name' => 'require|max:20',
           'email' => 'email'
       ]);
       if (!$validate->check($data)) {
           // 数据验证不通过的处理
       } else {
           // 数据验证通过,进行数据库插入等操作
       }
       ```