# php 编译规范

- 编码无特殊说明，参考 PSR 规范
  https://www.kancloud.cn/thinkphp/php-fig-psr/3139

- thinkPHP 编码注意事项
  
  - 事务要在控制器中实现，不允许在模型中实现
  
  - 在 THINKPHP6 中，跨域要基于中间件实现，不要在 index.php 文件中实现
    参考文档：thinkphp6 解决跨域.note
    链接：http://note.youdao.com/noteshare?id=88846717ae6024219e544832557d7583&sub=93F626A294EE49F889F4F1B8B71E2CC3
    错误示例
    /public/index.php
    
    ```
    define('WEB_DIR',dirname(str_replace($_SERVER['DOCUMENT_ROOT'],"",$\_SERVER['SCRIPT_FILENAME'])));//定义根目录虚拟路径
    header("Access-Control-Allow-Credentials:true");
    header("Access-Control-Allow-Origin:*");//注意修改这里填写你的前端的域名
    header("Access-Control-Max-Age:3600");
    header("Access-Control-Allow-Headers:\_,Content-Type,Fetch-Mode,accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,SessionToken");
    header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE,OPTIONS, POIST');
    // 执行 HTTP 应用并响应
    $http = (new App())->http;
    $response = $http->run();
    $response->send();
    $http->end($response);
    ```
  
  - 复杂的业务操作建议放在流程中，不要放在控制器中实现。例如 订单退订、订单核销等。

- 方法要写注释，说明方法功能

- 单个函数代码行数不要超过 200 行（注释不算），单个文件代码行数建议超过 2000 行（注释不算）

- 后台接收前端发来的的数据，一定要用 trim 方法去掉前后空格

- 变量命名语义化，变量名作用域超过 10 行以上的，禁用 a,b,c,i,j,k 等简单且无意义的字母作为变量命名

- 与第三方系统对接的，接口交互要写日志。记录接口请求与返回的具体信息。
