ThinkPHP

1. 命名规范

  • 目录和文件
    • 目录使用小写+下划线;
    • 类库、函数文件统一以 .php 为后缀;
    • 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
    • 类(包含接口和Trait)文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
    • 类名(包括接口和Trait)和文件名保持一致,统一采用驼峰法命名(首字母大写)。
  • 函数和类、属性命名
    • 类的命名采用驼峰法(首字母大写),例如 UserUserType
    • 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip
    • 方法的命名使用驼峰法(首字母小写),例如 getUserName
    • 属性的命名使用驼峰法(首字母小写),例如 tableNameinstance
    • 特例:以双下划线 __ 打头的函数或方法作为魔术方法,例如 __call__autoload
  • 常量和配置
    • 常量以大写字母和下划线命名,例如 APP_PATH
    • 配置参数以小写字母和下划线命名,例如 url_route_onurl_convert
    • 环境变量定义使用大写字母和下划线命名,例如 APP_DEBUG
  • 数据表和字段
    • 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 think_user 表和 user_name 字段,不建议使用驼峰和中文作为数据表及字段命名。

2. 开发规范

  • 目录结构
    • ThinkPHP6.0 支持多应用和单应用开发,推荐选择多模块开发模式。
  • 数据库
    • 必须遵循官方文档的数据表和字段采用小写加下划线方式命名规范;
    • 绝不使用命令行或者 PHPMyAdmin 直接创建索引或表,必须使用数据库迁移工具去创建表结构,并提交版本控制器中;
    • 绝不为了共享对数据库更改就直接导出 SQL,所有修改都必须使用数据库迁移工具,并提交版本控制器中;
    • 绝不直接向数据库手动写入伪造的测试数据,必须使用数据填充来插入假数据,并提交版本控制器中;
    • 数据表名必须为「单数」, 多个单词情况下使用「Snake Case」 如:topic, user_log;
    • 数据库字段名必须为「Snake Case」,如:view_count, create_time
    • 数据表主键必须为「id」;
    • 数据表外键必须为「resource_id」,如:user_id , topic_id
    • 绝不允许数据表没有时间戳字段,每个表必须有创建时间(create_time) 和 更新时间 (update_time),并且这两个字段必须 是整型( int );
    • 和自动时间戳字段规范保持一致,其它时间类型必须存储成整型( int ),并且命名应该以 _time 为后辍;
    • 不应该所有数据库字段允许空值,应该为索引、字符串或整数字段指定一个合理的默认值。
  • 路由
    • 绝不在路由配置文件里书写『闭包路由』或者其他业务逻辑代码;
    • 路由器要保持干净整洁,绝不放置除路由配置以外的其他程序逻辑;
    • 必须优先使用 Restful 路由,配合资源控制器使用;
    • 应该使用 name 方法为路由指定生成标识,路由标识必须优先使用『资源前缀』作为命名规范,如 topic.index 的资源前缀是 topic.
    • 当路由有标识时,获取 URL 时必须优先使用标识路由获取。
  • 助手函数
    • 公共助手函数必须创建在 app/common.php 里;
    • 模块独有助手函数必须创建在模块的 common.php 里,如 app/index/common.php
    • 助手函数命名必须遵循 ThinkPHP 官方命名规范, 使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip
  • 视图模板
    • 视图模板文件必须放在应用的 view 目录里,如:app/index/view
    • 为了保持目录清晰,模板布局应该放在 view/layout 目录里;
    • 局部视图模板文件必须使用 _ 前缀来命名,如:app/index/view/topic/_sidebar.html
    • 为了和 Restful 路由器和资源控制器保持一致,视图模板命名也必须使用资源视图的命名方式,如控制器 app\index\controller\Topic 对应的视图模板文件存放目录是 app/index/view/topic
    • 在视图模板文件里应该优先使用内置标签,不应该使用原生 PHP 语法。