培养自己的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中的cookie不用刷新就生效的方法
Feb 04 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
php生成验证码函数
Oct 20 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
php字符集转换
Jan 23 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP-FPM的配置与优化讲解
Mar 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
图书管理程序(三)
2006/10/09 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
PHP目录操作实例总结
2016/09/27 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
React Router v4 入坑指南(小结)
2018/04/08 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
Python深入学习之闭包
2014/08/31 Python
Python模块文件结构代码详解
2018/02/03 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
python读取ini配置文件过程示范
2019/12/23 Python
Django 批量插入数据的实现方法
2020/01/12 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
.NET常见笔试题集
2012/12/01 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
2014标准社保办理委托书
2014/10/06 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
电影雷锋观后感
2015/06/10 职场文书
高三毕业感言
2015/07/30 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS