六道木的开发规范V1.0(更新于20200326)

【推荐阅读】微服务还能火多久?>>> hot3.png

  • 目录
  • 1.命名方式
  • 1.1变量命名
  • 1.2数组变量命名
  • 1.3全局变量
  • 1.4全局常量命名
  • 1.5静态变量命名
  • 1.6函数命名
  • 1.7类的命名规范
  • 1.8类文件命名规范
  • 1.9类属性命名规范
  • 1.10类方法命名规范
  • 1.11类方法参数命名
  • 1.12类的实例对象的命名(对象变量命名)
  • 1.13数据库命名
  • 1.14模板文件名命名
  • 1.15文件名的命名规范
  • 2.性能优化
  • 2.1变量(重要)
  • 2.2循环(重要)
  • 2.3函数(重要)
  • 2.4文件(重要)
  • 2.5面向对象(重要)
  • 2.6字符串
  • 2.7运算
  • 2.8数组
  • 2.9判断(重要)
  • 2.10缓存
  • 2.11其它
  • 2.12数据库优化(重要)
  • 2.13前端优化

速查表格

类型

命名方式

举例

变量命名

小驼峰法

$userName

数组变量命名

小驼峰+ Array

$userInfoArray

全局变量命名

g+大驼峰

global $gData

全局常量命名

所有字母都使用大写,以下划线'_'分隔每个单词

INDEX_URL

静态变量命名

s+大驼峰

$sStatus

函数命名

小写字母+下划线组合

get_client_ip()

类的命名

大驼峰

GetName()

类文件命名

大驼峰

GetName.class.php

类属性命名

小驼峰(原则上)

$userName=’’;

同上

对象变量+Object

$dataObject=’’;

同上

下划线+存储对象属性

$_username=NULL

类方法命名

小驼峰法

public function checkPhone(){}

类方法参数命名

小驼峰法

public function

checkPhone($userId){}

类实例对象命名

下划线+全小写

$_name = new UserName();

数据库命名

表名全小写,以下划线分割

t_user_type

数据库表字段命名

表名全小写,以下划线分割

user_id

模板文件命名

小写+下划线隔开

brand_add.html

文件名命名

全小写

bankcard

PSR规范参考:https://www.jianshu.com/p/b33155c15343

1.命名方式

1.1变量命名

使用英文名词、动词,以大写字母作为单词的分隔,其他的字母均使用小写,单词的首个字母使用小写。如:

$repeatCount = '';
$delUserSql = '';

变量命名如要用缩写,只能使用项目中有据可查的英文缩写方式,例如可以使用$data而不可使用$data1、$data2这样容易产生混淆的形式,应当使用$articleData、$userData这样一目了然容易理解的形式。

1.2数组变量命名

使用英文名词、动词,以大写字母作为单词的分隔,其他的字母均使用小写,单词的首个字母使用小写,不使用下划线,以字符串 Array 为后缀

$scopeArray = array(); 
$bookIdArray = array();

1.3全局变量

全局变量应该带前缀‘g’, 使用大写字母作为词的分隔,其他的字母均使用小写。理由:知道一个变量的作用域是非常重要的。

 global $gLog;

1.4全局常量命名

使用英文名词、动词,所有字母都使用大写,以下划线'_'分隔每个单词。这是命名全局常量的传统。例如:

define( 'WEBSITE_NAME', '名称' );
define( 'WEBSITE_URL', '地址' )
define("A_GLOBAL_CONSTANT", "Hello world!");

1.5静态变量命名

  • 写法1:静态变量应该带前缀‘s’,使用大写字母作为词的分隔,其他的字母均使用小写。
function test(){  
static $sStatus = 0;
}

理由:知道一个变量的作用域是非常重要的。

  • 写法2:使用英文名词、动词,以大写字母作为单词的分隔,其他的字母均使用小写,单词的首个字母使用小写,不使用下划线,以字符串 Static 为后缀。
function getDirectoryFile(){
         static $fileArrayStatic = '';
         static $fileNumStatic = '';
}

1.6函数命名

函数名使用小写字母、下划线组合。

get_client_ip()

函数名字采用C语言的惯例,所有的字母使用小写字母,使用'_'分割单词。 这样可以更易于区分相关联的类名。

PS1:不要把小括号和函数名紧贴在一起。要用空格隔开它们。如果小括号紧贴着函数名,二者很容易被看成是一体的。

  function some_bloody_function () {}

PS2:除非必要,不要在Return返回语句中使用小括号。

1.7类的命名规范

  • 使用英文名词,类文件采用驼峰式写法。以大写字母作为词的分隔,其他的字母均使用小写,名词的首个字母使用大写,不使用下划线。
  • 使用完整单词,避免缩写词(除非该缩写词被更广泛使用,像URL,HTML)
  • 在为类命名前首先要知道它是什么。如果通过类名提供的线索,您还是想不起这个类是什么的话,那么您的设计是做得不够好。
  • 超过三个单词组成的混合类名是容易造成系统各个实体间的混淆,请重新设计类名。
class UserAccount{}

class PaintingOrder{}

1.8类文件命名规范

类的文件名与类的名字保持一致,包括大小写以“ .class.php”作为文件的后缀。

MyDb类保存的文件名称是MyDb.class.php
MySql类保存的文件名称是MySql.class.php
Page类保存的文件名是Page.class.php
UserName类保存的文件名称是UserName.class.php 

注意:正是由于类的文件名要与类的名字保持一致,所以一个php文件只能包含一个类定义编码。

1.9类属性命名规范

使用英文名词、动词,以大写字母作为词的分隔,其他的字母均使用小写,对于类属性为某个对象变量,则以字符串 Object 为后缀,普通属性命名规范同变量的命名规范。如果是用于存储对象的属性,使用1个下划线开始。

public $tableName = '';
private $databaseObject = '';
public  $_username = NULL;

1.10类方法命名规范

类中的方法可自行定义如下

  • 全部使用小写用下划线作为词的分隔 get_file_content()        
  • 采用驼峰法,即以大写字母作为词的分隔,其他的字母均使用小写checkEmailErrors()

通常每个方法只执行一项逻辑动作事务,所以对它们的命名应该清楚的说明它们是做什么的。比如用checkEmailErrors()代替errorCheck(),用dumpDataToFile()代替dataFile()。这么做使功能和数据成为更可区分的物体。

1.11类方法参数命名

方法的参数的命名规范同变量的命名规范。

1.12类的实例对象的命名(对象变量命名)

类的实例对象的命名规范同变量的命名规范,只不过实例对象是以1个下划线开头的,同类中存储对象的属性的规范一样。这样,无论是在类的内部,还是类的外部,只要是以下划线开头的变量,那就是对象名。(jQuery对象的命名规范与此一致。国外通用。) 

$_name = new UserName();

PS:有的公司要求是 "变量名" + "_obj",如:$name_obj;而有的公司则使用类名称为变量前缀,所有字母都使用大写,以字符串_OBJECT 为后缀。

$USERNAME_OBJECT = new UserName();
$PAINTINGORDER_OBJECT = new PaintingOrder();

1.13数据库命名

数据库表名所有字母都使用小写,使用'_'作为每个词的分界,数据字段命名也与数据表命名相同.

cz_goods_attr(商品属性表)
cz_goods_type(商品类别表)

1.14模板文件名命名

所有字母都使用小写,使用'_'作为每个词的分界,这样做的好处是方便平移到其他的系统平台中,不会因为大小写而发生问题.

brand_add.html (品牌增加显示模版文件)
brand_list.html(品牌展示模版文件)

1.15文件名的命名规范

文件名使用英文名词、英文动词,以及下划线,所有字母都使用小写字母。

例如: index.php、index_ad.html

2.性能优化

性能是网站运行是否良好的关键因素, 网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养。因此如何优化PHP性能呢?

2.1变量(重要)      

  • 变量大小,注意变量大小是节约内存的最有效手段,对于来自用户表单、数据库和文件缓存的数据都需要控制变量的大小。 因为cpu要处理的数据是来源于内存
  • 变量有效期,使用unset()函数注销不需要的变量是一种良好的习惯,将一些不需要的变量立即注销可提高内存的使用率。
  • 复制变量,尽量不要复制变量,否则就会带来1倍的内存消耗,即使复制变量也应该要立即注销原有变量。
  • 变量类型,初始化变量请注意其变量类型,一个变量在执行过程中最好只有一种类型状态。对于数组变量,请初始化声明,如下: $a = array();
  • 临时变量,是处理业务逻辑的临时存储,这些都是需要消耗内存的。如果临时变量使用结束请立即注销,特别是在一些过程式代码的执行流程中,对于一些函数,如果业务非常复杂,同样需要立即注销临时变量
  • 静态变量,对于一些需要由复杂业务产生的变量,如果在程序的执行过程中多次产生并使用,可考虑使用静态变量,减少程序的cpu执行次数
  • 变量的性能:局部变量>全局变量>类属性>未定义的变量。

2.2循环(重要)

  • 尽量减少循环的次数。
  • 尽量减少循环的潜逃的层次,不要超过三层。
  • 避免在循环内有过多的业务逻辑。
  • 不要循环包含文件
  • 不要循环执行数据库操作。
  • 优先使用foreach,它比for/while效率高
  • 不要把 count/strlen/sizeof 放到 for 循环的条件语句中 For($i=0,$count=count($array);$i<$count;$i++){} 不要使用for($i=0;$i<count($array);$i++){};
  • for($i=$total;$i>0;$i–){}性能好于for($i=0;$i<$total;$–){}
  • 保持循环体内的业务逻辑清晰

2.3函数(重要)

  • 函数职责清晰,一个函数只干一件事,不要杂揉过多的业务逻辑
  • 函数代码体不要超过20行,反之,考虑拆分。
  • 优先使用php内置函数
  • 常量与函数同时能干一件事,优先使用常量。
phpversion() < PHP_VERSION
get_class() < __CLASS__
is_null() < NULL ===
  • echo 的性能好于print,输入多个变量的时候用echo $str,$str1,不用.连接符
  • $_SERVER[REQUEST_TIME]替换time();
  • 字符串替换strtr()->str_replace()->preg_replace()->epreg();
  • 发挥trim最大功效,替换substr。$filepath=trim($filename,’/’).’/’;
  • Isset/empty 虽然两个函数功能有所差异,但在同样的情况下推荐使用 empty()
  • isfile/file_exist 两个函数的功能有所不同,file_exist既可判断文件是否存在,也可以判断目录是否存在,在同样的情况下推荐使用is_file

2.4文件(重要)

  • 减少文件包含数,减少磁盘 IO
  • 使用完整路径,或者容易转换的相对路径。避免在 include_path 查找
  • 文件的代码行数不要超过 2000 行
  • require_once/include_once 效率低于 require/include, 需要额外的去查看系统是否已经调用过这个文件. 因为它们在一个 opcode 缓存下的调用非常慢
  • 程序执行文件用 requie/require_once,缓存文件用include/include_once。Include 效率好于 require
  • 优化 spl 中的文件自动加载机制,可参靠 yii
  • 类库文件加载,是否考虑类是否已经实例化,可考虑采用设计模式之单例模式
  • 文件读写的并发性

2.5面向对象(重要)

  • 控制实例的创建的数量
  • 优先使用常量、类常量
  • 优先例用静态变量,静态属性
  • 类的结构合理
  • 面象接口编程
  • 封装变化点
  • 依赖于抽象,不依赖于细节
  • 优先使用静态成员
  • 类的接口清晰稳定,类的职责单一,类与类的通信合理
  • 使用常量的好处 编译时解析,没有额外开销 杂凑表更小,所以内部查找更快 类常量仅存在于特定「命名空间」,所以杂凑名更短 代码更干净,使除错更方便

2.6字符串

  • 用单引号替代双引号引用字符串;避免检索字符串中的变量

2.7运算

  • 用 i+=1 代替i=i+1。符合c/c++的习惯,效率还高
  • ++$i 的效率高于++$i,–$i 同理[/hide]

2.8数组

  • 多维数组尽量不要循环嵌套赋值;
  • 使用$array[‘name’]方式访问数组,禁止$array[name]/$array[“name”]

2.9判断(重要)

  • 逻辑判断请优先使用switch 的方式,对于业务逻辑相对较多的情况请选择if/else,提高代码的可读性
  • 尽量控制if/else判断的个数,如果太多请考虑功能优化或代码优化
  • 尽量使用恒等用于比较判断,恒等的效率高于等于,而且还能避免一些类型强制转换的错误
  •  if/else与_&&,单条语句判断请选择&&的形式, &&的效率高于if/else,如下 :
 if ($a == 1) {
   $b = 2;
}

可选择为($a == 1) && $b = 2;

2.10缓存

  • 使用php加速器,缓冲opcode
  • 例用memcache/nosql
  • 使用内存数据库
  • 使用文件缓存
  • 缓冲功能

2.11其它

  • 少用@符号,严重影响性能
  • 适时关闭远程资源连接如数据库,ftp、socket等,适时的清理这些资源

2.12数据库优化(重要)

  • 合理的商业需情
  • 数据库 schema 架构优化
  • 垂直与水平分库分表
  • 索引优化,查询优化
  • 第三方开源检索工具(sphinx)
  • 主从数据库服务器的使用。

2.13前端优化

  • 合理的 html 结构
  • 合理 html 与css 的同时,考虑 Css 设计合理,减少 http 请求
  • 合理 html 与java script 的同时,考虑拆分是否合理,减少 http 请求
  • 优化 java script 代码,让用户有良好的体验
  • 根据 http 协议,优化高并发请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值