培养自己的php编码规范


Posted in PHP onSeptember 28, 2015

为什么我们要培养自己的编码规范?

我们写代码的时候,一个好的编码规范,对我们来说能够起到很多意向不到的效果。至少会有一下的好处:

1、提高我们的编码效率。整齐划一的代码方便我们进行复制粘贴嘛!
2、提高代码的可读性。
3、显示我们专业。别人看到了我们的代码,发现整个代码的书写流程都整齐划一,瞬间逼格就上去了!
4、方便团队协同工作。大家使用同一的规范,这样就消除了五花八分的书写方式,同一协调!

编码规范包含两大块,代码规范和注释规范

其实我们所写的php脚本,其实也就是由两大块组成的,即对代码的书写、对代码的注释!不同的框架,甚至不同的公司,对这方面都会有所不同,这里只是已将之言,仅仅是对自己的书写规范进行一个总结!希望能对其他的朋友以启示

1、代码的书写规范

文件夹的命名:

文件夹同一使用小写字母。如存放控制器的文件夹,直接命名为controller即可

文件的命名:

如果是类文件的话,那么文件的命名应该同类名称保持一致,统一使用大驼峰。如Session.class.php , 对应类名称为Session,
如果是普通的工具脚本,那么统一使用小驼峰,如common.php

类名称的命名:

类名称同一使用大驼峰,Cookie类

方法名的命名:

统一使用小驼峰,一般使用 动词 + 名次 的形式来描述该方法的功能,如sendMessage,发送短信。
在面向对象中,遵循同样的规则,但是个别地方有所区别:

public getUserName()
protected _getTotalAmount()
private _setBlanceAmount()

变量的命名规范:

关于变量,我们需要多说几点:
1、无论在面向对象还是非面向对象的语法中,变量统一使用小驼峰,如:$workYears。
但是在面向对象中又有所不同,public 、 protected 、 private ,protected或者private属性的时候,前面加上了 _ 作为区别

public $startPosition = 1;

protected $_salaryAmount =1000;

private $_sex = 'formale';

2、如果是常量的话,统一使用大写,中间使用下划线进行分割。

define('CURRENT_SCRIPT', 'index.php');

const TRANSACTION_TYPE = 'income';

3、全局变量,使用大驼峰,前缀加上 _ ,所有的单词首字母大写。因为知道一个变量的作用域是非常重要的,所以局部变量和全局变量应该很明显的进行分开!

$_System_Config;

$_Root_Path;

缩进符

关于编码的缩进符号,我们统一使用制表符缩进!也许有的人会问为什么不适用空格缩进的呢?
原因很简单,大部分的编辑器都支持制表符等于多少个空格,而使用空格就没得调了!

运算符号

所有的两元运算符号,都应该前后使用空格进行

$name = 'zero';
$age > 18 ? 'adult' : 'children';

常见的流程语句规划

我们约定,所有的流程语句的花括号都单独占据一行。理由:如果遇到较为复杂的业务逻辑,花括号会出现很多的嵌套,这样一来我们会混淆个个对应的花括号!

1、分支语句

if($age >= 18 && $age <= 30) 
{
  echo 'young man';
}
else if($age > 30 && $age <= 60)
{
  echo 'middle aged';
}
else
{
  echo 'old man';
}

//下面这段代码高手我们一个问题,在if语句中,即使在可以不要花括号的情况下,花括号也是要写上的
if($age > 60)
{
  echo 'I am very old';
}

switch($status)
{
  case 'forbiden':
    echo 'login forbidden';
    break;
    
  case 'normal':
    echo 'login in';
    break;
    
  default:
    echo 'status is wrong' :
    break;
}

2、循环语句

while($condition)
{
  statesments......;
}

foreach($arrayList as $arrayKey => $arrayItem)
{
  states......;
}
do
{
  statements......;  
}
while($condition)


for($start; condition; changenumber)
{
  statements......;
}

2、注释的书写规范

很多人说好的代码是不需要注释的,其实,个人认为这是一句很扯淡的话(也可能他是对的,除非整个团队就他一个人,他包办了一切,不用看别人的代码)。

个人的观点是:多写注释,无论是对团队的其他人,还是对自己都是非常友好的!

根据个人的经验来看,注释至少有以下几个作用:

1、有利于提高代码的可读性,毕竟读你的注释要比读你的代码要容易的多!
2、有利于规划自己的代码布局!之所以这么说,是因为和代码注释的种类有关。“有利于代码的布局”,这种看着有点悬的事,光说是说不明白的,我们需要实实在在的例子做支撑!
3、由于我们的注释规范是按照phpdocumentor的要求,所以通过这个工具,还可以生成一份对代码的总体说明,相当于一个使用说明书!g

代码注释的种类

1、块注释
块注释,个人认为主要用在了三个地方。对php脚本的描述、对一个大的功能模块的描述、在一行之内不能写完注释的时候,也应该放在块注释中

2、行注释
行注释,个人认为他是配合块注释进行工作的!一般用于描述一个大的功能模块的具体细节!

实战的案例

关于phpdocumentor语法的具体使用细节,这里就不多说了,官网上说的再清楚不过了

培养自己的php编码规范

从上面的例子中我们可以看一下代码的布局大致是怎么回事,但是还需要我们在实践中慢慢摸索

下面附上一些php的编程规范,给大家参考下

一、文件标记:

 1.所有php文件,其代码标记均采用完整php标签,不建议使用短标签(短标签容易和xml混淆,php从5.4开始默认不支持短标记)。

 2.对于只有php的代码文件,建议省略结尾处的‘?>'。这是为了防止多余的空格或其他字符影        响到代码。

二、文件和目录命名

 1.程序文件名和目录名均采用有意义的英文命名,不使用拼音和无意义的字母,只允许出现字母、数字、下划线和中划线字  符,同时必须以‘.php'结尾(模板文件除外),多个词间使用驼峰命名法。

    例://类统一采用:DemoTest.class.php

          //接口统一采用:DemoTest.interface.php

          //其他按照各自的方式:demoTest.{style}.php

三、文件目录结构

规范的目录结构有助于团队协作开发和后期维护。

——app            //独立的应用

——class          //单个的类文件,共用的类文件

——conf/inc    //配置文件或目录

——data          //数据文件或目录

——doc           //程序相关文档

——htdocs       //document_root

——images       //所有图片文件存放路径

——css            //css文件

——js               //js文件

——lib              //共用类库

——template    //模板文件

——tmp            //临时文件目录

——cache    //缓存文件

——session  //SESSION文件

——template_c    //编译后的模板文件

——other

——upload      //上传文件

——manage    //后台管理文件目录

四、命名规范

1.变量命名:php中变量区分大小写,一个有效的变量名由数字、字母或下划线开头,后面跟任意数量的字母、数字、下划线。

    a)程序整体以驼峰命名法,以小写字母开始,同时命名要有意义。(function displayName())

    b)PHP全局变量键值两边都有‘_',中间用驼峰命名法命名。($_GLOBAL['_beginTime_'])

    c)普通变量整体采用驼峰命名法,建议在变量前加表示类型的前缀。不确定类型的以大写字符开头。

    d)函数名要尽量有意义,尽量缩写。

2.类及接口命名:

    a)以大写字母开头。

    b)多个单词组成的变量名,单词之间不用间隔,各个单词首字母大写。

    c)类名与类文件名保持一致。

    d)程序中所有的类名唯一。

    e)抽象类应以Abstract开头。

    接口命名规则:

        i)采用和类相同的命名规则,但在其命名前加‘i'字符,表示接口。

        ii)尽量保持和实现它的类名一致。

3.数据库命名:在数据库相关命名中,一律不出现大写。

    a)表名均使用小写字母。

    b)表名使用同一的前缀且前缀不能为空。

    c)对于多个单词组成的表名,使用‘_'间隔。

    d)表字段命名规则。

            i)全部使用小写字母。

            ii)多个单词不用下划线分割。

            iii)给常用字段加上表名首字母做前缀。

            iv)避免使用关键字和保留字。

五、注释规范

1.程序注释:写在代码前面而不是后面,单行代码按照习惯写在代码尾部;大段注释采用/**/的方式,通常为文件或函数的顶部,代码内部使用'//';注释不宜太多;代码注释应该描述为什么而不是做什么,给代码阅读者提供最主要的信息。

2.文件注释:文件注释一般放在文件的顶部,包括本程序的描述、作者、项目名称、文件名称、时间日期、版本信息、重要的使用说明(类的调用,注意事项等)。版本更改要修改版本号,并加上mofify注释。

3.类和接口注释:按照一般的习惯,一个文件只包含一个类。

4.方法和函数注释:方法和函数的注释写在前面,通常需要表明信息的主要可见性、参数类型和返回值类型。

    /**

    *    连接数据库

    *    @param string $dbhost    数据库服务器地址

    *    @param string $dbuser    数据库用户名

    *    @param string $dbpwd    数据库密码

    */

六、代码风格

1.缩进和空格:使用4个空格做为缩进,不使用Tab键;变量赋值时,等号两边留出空格。($url = '$_GET['url']';)

2.语句断行:尽量保证程序语句一行即一句;尽量不要使一行的代码过长,80个字符以内;如果一行的代码太长,请使用类似于‘.='方式断行连接;执行数据库的sql语句操作时,尽量不要再函数内写sql语句,而先用变量定义sql语句,然后在执行操作的函数中调用定义的变量。

3.更好的习惯:在代码中使用下面列举的方法,可以使代码更优雅。

        1):多使用php中已经存在的常量,而不要自己定义。

            例://换行

                  echo $msg."\r\n";

                  echo $msg,PHP_EOL;

                php中PHP_EOL是一个预定义常量,表示一行结束,随着所使用系统不同,使用PHP_EOL代码可移植性更高

        2):在echo中使用逗号做连接符,比用‘.'做连接符代码更美观。

        3):单引号的效率高于双引号,但二者在使用上有区别,学会使用printf函数。

            例://echo

                echo  '每个'.$scholl.'大约有'.floor($avg).'个学生';

                  //printf

               $format = '每个%s大于有$d个学生';

                printf($format,$school,$avg);

        4)  :详细的注释

        5):不要 滥用语法糖,语法糖就是语言中的潜规则,即不具备普遍代表性的语法。

PHP 相关文章推荐
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
destoon整合UCenter图文教程
Jun 21 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
9个比较实用的php代码片段
Mar 15 PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 PHP
PHP微信开发之有道翻译
Jun 23 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
php微信开发之百度天气预报
Nov 18 PHP
PHP explode()函数用法讲解
Feb 15 PHP
ThinkPHP数据操作方法总结
Sep 28 #PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 #PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 #PHP
ThinkPHP中数据操作案例分析
Sep 27 #PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 #PHP
用php代码限制国内IP访问我们网站
Sep 26 #PHP
十大使用PHP框架的理由
Sep 26 #PHP
You might like
php 文件状态缓存带来的问题
2008/12/14 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
JavaScript生成的动态下雨背景效果实现方法
2015/02/25 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python实现在IDLE中输入多行的方法
2018/04/19 Python
python实现矩阵打印
2019/03/02 Python
python版DDOS攻击脚本
2019/06/12 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
.net笔试题
2014/03/03 面试题
联谊活动策划书
2014/01/26 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
2014年冬季防火方案
2014/05/21 职场文书
中秋节感想
2015/08/10 职场文书
七年级作文之雪景
2019/11/18 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
Win11更新失败并提示0xc1900101
2022/04/19 数码科技