浅析PHP开发规范


Posted in PHP onFebruary 05, 2018

基本约定

源文件

代码使用<?php开头,忽略闭合标签?>

文件格式必须是无BOM UTF-8格式

一个文件只声明一种类型,如class和interface不能混写在一个源文件中

缩进

使用4个空格来缩进,IDE可以设置

行长度

每行120个字符

关键字

所有关键字均为小写,如true、false

命名

类名为大驼峰法,如UserModel

类方法名为小驼峰法,如getUserId()

函数使用小写字母加_组合,如get_cookie()

变量名使用小驼峰法,如$userId

常量定义为大写字母加_组合,如IS_DEBUG

代码注释标签

类文件中对类、方法、属性进行注释,使用@param @return @throwns

@param注释写出详解,如@param string $username 用户名

业务模块

路由为小写字母加_组成,如/api/get_user_info

View层负责数据展示

Controller层负责输入参数校验,最外层捕捉异常,调用Logic和View视图层

Logic层负责具体业务逻辑,调用Model层,返回处理数据

Model层负责数据表查询和关联关系

异常类需分清功能,如ParamException表示参数错误,UserException表示自定义异常

异常需分类定义code,使用PHP类常量代替,如

<?php
namespace app\exceptions\codes;

class UserExceptionCode extends BaseExceptionCode {
  const NO_AUTH       = 1000001;
  const NO_AUTH_MSG     = '不具有权限';
  const STATUS_EXCEPTION   = 1000002;
  const STATUS_EXCEPTION_MSG = '状态异常';    
}

数据表文件如有Enum类型,使用PHP类常量代替,如

<?php
namespace app\enums;

class UserEnum extends BaseEnum {
  const STATUS_DELETED = -1;// 已删除
  const STATUS_DISABLE = 0;// 禁用
  const STATUS_ENABLE = 1;// 正常

  const AUTH_GUEST     = 1;// 匿名用户
  const AUTH_GENERAL_ADMIN = 2;// 普通管理员
  const AUTH_SUPER_ADMIN  = 3;// 超级管理员
}

其中STATUS和AUTH为数据表映射字段名

Api接口输出,示例

{
  "code" : 0,
  "msg" : "success",
  "data" : {
    "userId" : 100
  }
}

其中code与msg为必填字段,data为空的情况下不填,示例

{
  "code" : 100001,
  "msg" : "不具有权限"
}

其它

数组,键为字符串时候使用单引号,只有一个键时候使用单行,示例

$arr = [ 'userId' => 100 ];

多个键时候使用多行,示例

$arr = [
  'id'    => 100,
  'username' => 'admin',
];

字符串使用单引号'

PHP 相关文章推荐
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
PHP 最大运行时间 max_execution_time修改方法
Mar 08 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
Yii分页用法实例详解
Dec 04 PHP
php实现的日历程序
Jun 18 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
PHP 芝麻信用接入的注意事项
Dec 01 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
Laravel框架用户登陆身份验证实现方法详解
Sep 14 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
实例讲解PHP页面静态化
Feb 05 #PHP
PHP使用ActiveMQ实例
Feb 05 #PHP
详解PHP中mb_strpos的使用
Feb 04 #PHP
详解PHP文件的自动加载(autoloading)
Feb 04 #PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 #PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 #PHP
php实现解析xml并生成sql语句的方法
Feb 03 #PHP
You might like
模仿OSO的论坛(二)
2006/10/09 PHP
逐步提升php框架的性能
2008/01/10 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
php自定文件保存session的方法
2014/12/10 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
最短的IE判断代码
2011/03/13 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
vue如何截取字符串
2019/05/06 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python实现冒泡排序算法的两种方法
2018/03/10 Python
对pandas通过索引提取dataframe的行方法详解
2019/02/01 Python
在django中自定义字段Field详解
2019/12/03 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
应届毕业生求职信范例分享
2013/12/17 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书