来源:http://blog.csdn.net/sinat_34990639/article/details/62423641

php编码规范

php标准委员会(php-styleguide@baidu.com):

许立强(TB-TD, 主席)贾春鑫(PS)廖慧琴(LBS RD)仇昊(VS)全伟(CS)

王岩(KS)颜玉刚(music-PD)张东进(SUMERU) 张振平(CID)王伟冰(贴吧-技术部)

参与规则制定:雷国强(GIS)李红亮(GPM)王霄池(SCloud)张健(CS)许鹏(GIS)鲁超伍(Mobile Search RD)杜伟(KS)孙笑(WD)v_sunhuai

  • 1. 前言
  • 2. 排版
  • 3. 命名
  • 4. 注释
  • 5. 编码原则
  • 6. 代码性能
  • 7. 工具支持

展示eagle支持规则

1. 前言

2. 排版

2.1. [强制][PHP002] 程序块要采用缩进风格编写,缩进的空格数建议为4个,单模块内必须统一。

解释

  • 不同的缩进风格对代码的可读性影响很大,以tab为缩进单位在不同的tab step 下可读性也相差很多,所以将缩进定为一个soft tab即4个空格,这样在所有环境下缩进都会保持一致。

2.2. [建议]关键字与其后的左括号之间有一个空格,而函数名与左括号之间不应有任何字符包括空格。

解释

  • 虽然很多情况下编辑器的highlight已经做了区分,但是从格式上区分关键字和函数适用于所有的情况。
示例
关键字    if (a > b)
函数名    funcA()

2.3. [建议]开始的大括号位于一行的末尾,结束的括号位于最末一行后,且独占一行。首括号也可另起一行,但一个模块内必须统一。

示例
if (a > b) {}

2.4. [强制] [PHP003] if/while等结构体,即使只有一行,也必须加上花括号,不得写成一行。

解释

  • 这样做可读性更好,并且方便修改。
示例
if (a > b) {    a = 1;
}

2.5. [建议]一行代码不得超过120个字节,建议控制在80字节内;一个函数不得超过500行,建议控制在100行以内。

解释

  • 代码更美观, 可读性更好

2.6. [建议]else-if语句使用else if形式,不使用elseif形式。

2.7. [建议]函数名与其后的左括号之间不应有任何字符(包括空格) 函数调用的左括号与其第一个参数之间不应有任何字符(包括空格) 最后一个参数与右括号之间不应有任何字符(包括空格) 参数列表的逗号后面应有一个空格

示例
funcA(a, b, c) {}

2.8. [建议]避免由于对错误的条件做判断带来if的嵌套。

解释

  • 减少if/else嵌套, 更利于代码逻辑的理解。

示例

  • 不推荐的方式:
    if (a === false) {    // error handle
    } else {    if (b === false) {        // handle
        }
    }
    

  • 推荐的方式:
    if (a === false) {    // error handle
    }if (b === false) {    // handle
    }
    

2.9. [建议]如果过长的话需要另起一行。if 语句的条件若较多较长,应折行;新行以逻辑运算符起始,与第一行 if 左括号后的第一个字符对齐;折行后,每行条件具有独立而明确的语义

解释

  • 这样做逻辑更一目了然。
示例
if (a > b && c > d
    && e > f && h > j
    && z > x) {}

2.10. [建议]多行的”=”可能的话尽量用空格对齐。

示例
a   = 1;
ab  = 2;
abc = 3;

2.11. [强制] [PHP009] Switch语句中每个case的break必须和case间有缩进。

示例
case ‘A’:
    a  = 2;
    break;

2.12. [强制] [PHP008] 初始化array如果采用多行结构时,数据项部分需要缩进,且最后一个数据项后面的逗号不可省略。

解释

  • 这样做在修改代码增加数据项的时候不容易出现语法错误。
示例
$a = array(
    'a' => 'b',
    'b' => 'c',
    'c' => 'd',
);

2.13. [建议] 复杂的表达式, 使用括号表明优先级, 而不完全依赖运算符优先级。

示例

  • 不推荐方式:
    if ($a && $b || $c + $b && $e) {}
    

  • 推荐方式:
    if (($a && $b) || (($c + $b) && $e)){}
    

2.14. [建议] 同一个代码块的变量定义, 应该尽可能集中在块开始位置,提高可读性。

2.15. [建议] 除模板外,不允许使用?>标记结尾, 避免其后误加的字符干扰页面渲染。

2.16. [建议] 产品线内必须统一换行符的使用, 推荐“n”。

3. 命名

3.1. [强制] [PHP025] 全局变量以g_开头。

解释

  • 全局变量对代码影响很大,以g_开头便能在代码中一眼看出是全局变量。
示例
g_count;

3.2. [强制] [PHP004] 常量命名使用全部大写字符,单词之间以’_’连接。

示例
PAGE_NUM

3.3. [建议]对于代码中的常量,建议用常量或define表示,不应直接写在代码中。

示例
define('PAGE_NUM', 3);

3.4. [强制] [PHP010] 关键字true、false、null必须小写

3.5. [强制] [PHP026] 类method命名采用驼峰命名, 普通function采用过程函数风格命名。

示例

  • 类method:
    public function getName() {}
    

  • 普通function:
    function show_me_the_money() {}
    

3.6. [强制·]类成员变量和局部变量必须采用驼峰命名法,建议增加三字节的类型前缀:arr、str、int、bol、obj等

示例
$strName, $intAge

3.7. [建议]文件(除了类)命名使用小写字母,单词之间以’_’连接。

示例
show_lemma.php

3.8. [建议]配置文件的名称为配置文件名 + .conf.php, 不涉及类的都小写通过”_”连接。

示例
good_version.conf.php

3.9. [建议]类名应以大写字母开头,每个单词的首字母大写。

示例
ActionController

3.10. [建议]final放在访问控制符的前面、访问控制符放在static的前面

示例
final public static function getInstance(){
}

4. 注释

4.1. [建议]文件、函数、类以及成员变量都应包含注释,关键代码必须有注释。

类文件/普通文件的注释, 说明该文件的主要作用。

示例
"A simple class describing employees" 说明类文件的主要作用。
"@package Employee" 说明namespace(如果有)
"@author George Schlossnagle" 说明作者信息/*** A simple class describing employees** @package Employee* @author George Schlossnagle*/

类的注释, 说明该类的主要作用。

示例
"An example of documenting a class" 说明类的主要作用。
"The employees annual salary" 说明变量的作用。
"@var number" 说明变量的类型。
"The class constructor" 说明方法的作用。
"@param" 说明参数类型。
"@access" 说明访问权限。
"@return" 说明返回值。/*** An example of documenting a class*/
class Employee
{/*** @var string*/private $name;/*** The employees annual salary* @var number*/private $salary;/*** @var number*/private $employee_id;/*** The class constructor* @param number*/public function Employee($employee_id = false) {if ($employee_id) {$this->employee_id = $employee_id;$this->_fetchInfo();}}/*** Fetches info for employee** @access private*/private function fetchInfo() {$query = "SELECT name,salaryFROM employeesWHERE employee_id = $this->employee_id";$result = mysql_query($query);list($this->name, $this->department_id) = mysql_fetch_row($result);}/*** Returns the monthly salary for the employee* @return number Monthly salary in dollars*/public function monthlySalary() {return $this->salary/12;}
}

4.2. [强制] [PHP027] 不能使用#作为单行注释, 多行注释/ * **/不能出现在同一行。

4.3. [强制] [PHP028] 函数必须通过param和return标记指明其参数和返回值。

4.4. [建议] 注释需要遵守phpDocumentor等注释规范,同一团队内部必须保持一致。

4.5. [建议] 必要的地方使用非文档性注释,提高代码易读性。

5. 编码原则

5.1. [建议]对传入或返回的参数进行类型检查和显式转换。

示例
$intSalary = (int) $salary;

5.2. [强制]对于函数返回值的判断,特别是true/false, 必须用===或!==。

5.3. [强制] [PHP029] 生成对象时,必须使用new Classname(),不能用new Classname。

5.4. [强制]所有文件路径都需要利用框架提供的宏写成绝对路径。

5.5. [建议]对于长时间运行的CLI程序,需要及时unset无用变量,尤其是PHP5.2上。

5.6. [强制]对于一些系统操作,使用php内置的函数例如rename、touch等即可。尽量避免使用exec调用shell命令。

5.7. [建议]除非特殊情况,否则不允许使用require和include,而使用对应的require_once/include_once。

5.8. [建议]配置项与PHP代码分离,不随CVS/SVN发布

5.9. [强制]预定义变量一律使用短格式,即:$_POST、$_GET、$_SERVER、$_ENV等,不再使用长格式:$_HTTP_POST_VARS、$_HTTP_GET_VARS。

5.10. [强制]类文件名必须符合所用框架自动加载规范,常见的是PSR-0。

5.11. [建议]除模板外,尽量不要在php代码中出现html标签。

5.12. [建议]能用foreach的就不要用for,能用for的就不要用while。

5.13. [强制]每个前端访问请求必须有且仅有一条notice日志。

5.14. [建议]数据库写操作必须有日志记录;记录条数应与操作一一对应。

5.15. [强制]文件更新操作,必须使用临时文件+mv的方式,切忌直接写在原文件。

5.16. [建议]字符串尽量用’ ‘而不是” “进行引用,一个是效率问题,一个是安全问题。

5.17. [强制] [PHP031] 所有的define语句,常量必须用’‘包括起来。

示例
define('PAGE_NUM', 3);

5.18. [建议]require/include后面不使用括号。

示例
require_once "a.php";

5.19. [强制] [PHP020] 函数允许使用默认参数,但是默认参数需要放到参数列表最后面。

5.20. [强制] [PHP032] 所有的全局变量应该写在函数的最开头,并且和后面的代码以空行隔开。

示例
function a() {global g_count;global g_time;a = 1;
}

5.21. [强制] [PHP033] 禁止使用and, or, 而是使用&&, ||

5.22. [建议]避免使用$i, $j这样无意义的变量名, 除非是用作循环计数变量。

5.23. [建议]避免使用php逻辑代码作为配置, 以降低改配置的危险性。

5.24. [建议]进行==判断时,建议把常量放在前面, 避免误写成赋值操作。

示例

  • 不推荐形式:
    if ($a == 1){
    }
    

  • 推荐形式:
    if (1 == $a){
    }
    

5.25. [建议]使用变量前赋初值,提高可读性,也可避免误用别处定义的同名变量。

5.26. [建议]错误码使用统一文件集中配置,并且使用常量,而不应裸写数字

5.27. [建议]对于无需子类化的实体类以及不应重载的方法使用final关键字限定。

5.28. [强制]对于不应实例化的父类使用abstract关键字限定。

5.29. [建议]避免重载父类的static成员,这在5.2.x存在问题。

5.30. [建议]对于仅用于某个函数或类的全局变量,使用static的局部变量或者类成员变量代替。

5.31. [建议]在头文件中用$GLOBALS定义全局变量,避免局部包含导致的作用域问题。

6. 代码性能

6.1. [强制] [PHP034] 把重复调用放在循环体外。

示例

  • 不推荐形式:
    for($i = 0; $i < count($arr); $i++)
    

  • 推荐形式:
    $arrCount = count($arr);
    for($i = 0; $i < $arrCount; $i++)
    

百度代码规范 -- PHP相关推荐

  1. 百度工程师手把手教你实现代码规范检测工具

    01 引言 代码规范是软件开发领域经久不衰的话题.在前端领域中,说到代码规范,我们会很容易想到检查代码缩进.尾逗号以及分号等等,除此之外,代码规范还包括了针对特殊场景定制化的检查.JavaScript ...

  2. 前端代码规范网址导航(总结)

    在大公司代码规范是非常重要的一件事情,多人协作,还有代码评审.所以能写出漂亮的代码非常重要. 这就好比你自己在家,无论是穿大裤衩子,还是背心,甚至是光膀子,都没人管你.但你要出门去约会,就要把最好的一 ...

  3. Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  4. 代码规范+《数学之美》读后感

    相关名字表示代码含义,提高代码可读性     例如"体积"用V表示."名字"用name表示 选取名字时,名字不能产生歧义并且不能与语言中已有的符号名称相同,避免 ...

  5. Android进阶之路 - 代码规范

    后来 - 回头再看该篇的时候,发现当项目处于中后期的时候,命名规范还是不太严谨,扩展性有限,所以推荐各位可以借鉴阿里.美团.华为等大厂的命名规范 ~ 关于代码规范(主要针对Android),我于202 ...

  6. autojs代码规范

    插件 vscode必须安装插件Prettier - Code formatter, 格式化代码快捷键 Shift + Alt + F Prettier is an opinionated code f ...

  7. 前端代码规范网站推荐

    京东凹凸实验室前端代码规范 https://guide.aotu.io/ 链接 腾讯前端代码规范 链接http://tgideas.qq.com/doc/index.html 百度前端代码规范文档 链 ...

  8. Eclipse_阿里代码规范插件下载

     背景: alibaba作为一个电脑技术区的重要角色,他们汇集了许多优秀的成品,同时也对技术人员有着或多或少的影响.这次我们就要用alibaba的编码规范来更严格的要求自己,我们可以从alibaba的 ...

  9. 转型实践|2022前端代码规范(大部分适用)

    面试时你写的代码杂乱无章,被技术挑剔而压工资时.别人早就用整洁的代码进入了大厂,越是好的公司对于代码规范也更为严格.再此把前端代码代码规范做了一下整理.话不多说看看吧. HTML规范 1.起止标签 所 ...

最新文章

  1. oracleDBA-D1
  2. 前端学习(3089):vue+element今日头条管理-关于接口的调错
  3. git使用—rebase还是merge
  4. 【MyBatis框架】查询缓存-一级缓存原理
  5. c++函数可变参数列表foo(int a, ...){}中的省略号“...”
  6. 软件设计师--面向对象技术
  7. Java代码中换行符怎么用
  8. add git 的文件 移除_【Git第八节】移除文件
  9. 凯恩帝数控系统面板介绍_KND凯恩帝数控系统说明书.doc
  10. 小学四年级计算机在线考试,小学信息技术四年级下册试题.DOC
  11. 鼠标右键中新建选项消失
  12. c语言this什么意思,JavaScript 中的this是什么?它到底做了什么?
  13. html代码广告代码大全,强制弹窗广告代码大全.doc
  14. 全新版大学英语综合教程第三册学习笔记(原文及全文翻译)——8 - A Clone Is Born(克隆生命诞生了)
  15. 【PIE-Engine Studio学习笔记06】图像分类——监督分类
  16. 为什么使用start方法启动Java的Thread线程?
  17. 技术管理工作中的三个原则
  18. android 图片占用内存的计算
  19. Flutter 引入第三方包
  20. 交互设计实用指南系列(11)—减少记忆负担

热门文章

  1. Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写
  2. Mysql数据库,表,字符集,主外键等创建的sql模板
  3. 服务器账户登录监控系统,服务器账户登录监控系统
  4. gba徽章机器人_徽章战士GBA攻略
  5. VS2015编译Poco+openssl,使用Poco发送HTTPS请求
  6. C++获取文件夹下所有文件名
  7. OpenCV伪彩色applyColorMap函数
  8. 011_Validation Rule about Time
  9. 在Linux中查看所有正在运行的进程
  10. jQuery添加/改变/移除CSS类