0

0

PHP 编码轨范

php中文网

php中文网

发布时间:2016-06-13 10:50:17

|

1164人浏览过

|

来源于php中文网

原创

PHP 编码规范

为了让我们的代码更具可读性以及维护性,同时也为了少写注释,我们希望通过规范的命名以及代码的书写达到 "code as document" 的目的。翼高电子商务系统中所有的 php 文件必须遵循该文档中规定的编码规范。同时,我们在svn的服务器端增加了规范检查,如提交的代码中存在不符合规范的代码,svn会返回错误提示。请仔细阅读svn的错误提示,提示中会有详细的出错文件、行数以及不符合规范的描述。

对于第三方的类库,如有必要请和项目管理人联系。

编辑器设置

  1. 代码缩进:所有的缩进使用空格取代Tab制表符,每一个缩进含有 4 个空格。
  2. 文件编码:所有PHP文件均保存为 UTF-8 ( No BOM )的字符编码,不允许使用 ANSI 。

命名约定

变量命名

变量名已驼峰方式进行命名,首字母小写,之后的单词的首字母大写。例如:

$currentUser 是正确的, 但是 $currentuser$current_user 就不正确。
$requestUrl 是正确的, 但是 $requestURL 就不正确。

名称应当是描述性的,并且简明。我们自然不希望使用冗长的句子作为变量名,但是多输入几个字符总好于疑惑于某个变量到底是干什么用的。

立即学习PHP免费学习笔记(深入)”;

常量命名

常量命名采用全部大写字母以及下划线(_)组成,例如 ORDER_TYPE。

循环计数器

允许使用一个单字符变量名的唯一情形是当它作为一个循环计数器的时候。在这种情况下,外层循环的计数器应当始终是 $i。如果有一个循环处于这个循环的内部,它的计数器应当是 $j,进而是 $k,等等。如果循环的计数器是一个已经存在并且名字有意义的变量,本规范并不适用。

for ($i = 0; $i < $outerSize; $i++) {     for ($j = 0; $j < $innerSize; $j++) {        foo($i, $j);     }  }

函数名称

函数也应该描述性地命名。这里我们并非在用 C 编程,我们不希望写出诸如“stristr()”此类的函数来。同上,单词间用驼峰方式区分。函数名称中某处最好有一个动词。较好的函数名称如printLoginStatus(), getUserData(),等等。

函数参数

参数遵循和变量名字相同的约定。我们不希望一堆这样的函数:doStuff($a, $b, $c)。在大部分情况下,我们希望仅仅看看函数的声明,就知道怎样使用它。参数数量需要控制在5个参数以内,超过5个参数可以使用数组传递。

  • 类的名称 :首先必须是一个有意义的英文单词或者词组。类名称首字母大写,每个单词的首字母也需要大写。
  • 类的成员变量 : 成员变量的命名和变量的命名规范保持一致。
  • 类的成员方法 :方法的名称和函数命名保持一致。 需要注意的是 :对于私有方法,我们要求方法名称必须以下划线开始。

总结

这里的基本哲学是不要为了偷懒而伤害了代码的清晰。但是,必须由一些常识来掌握这种平衡;例如,printLoginStatusForAGivenUser() 做得就过火了——这个函数命名为 printUserLoginStatus() 更好些, 或只是 printLoginStatus()。

代码布局

文件头部

除了模板文件以及第三方的 PHP 程序以外,所有的 PHP 文件头部必须包含一个标准的文件头部来说明这个文件的用途和其他的一些信息。如:

?

其中的copyright等标签请参考 PHP Documention 中的说明。

新秀B2C商城系统
新秀B2C商城系统

新秀B2C商城系统是一款简洁易用PHP商城系统。可免费下载使用,可用于商业用途,没有时效限制,除版权标识外,所有代码都允许修改。后台功能简介:1、商城设置:基本信息,配送方式,配送范围,支付方式,财务管理;2、商品管理:商品列表,添加商品,商品分类,商品品牌,商品属性;3、订单管理:订单列表,缺货登记;4、用户互动:用户管理,留言管理,评论管理,网站公告,在线客服,用户协议;5、文章管理:文章列表

下载

注释的写法

根据流行的注释写法我们要求对于代码段的注释采用以下的方式来书写:

块级注释:
这种注释用于描述下面多行的用途,一般用空行来区分一个代码块,写法如下

/* 这里是注释的内容 *//** * 如果注释的内容比较多 * 请用这种方式来写 */?

行内注释:
这种注释用于描述改行的代码,一般来说注释和代码都保持在同一行,如:

 $userInfo = $user->getInfo(); // 获得用户的详细资料?

大括号!!!

对于大括号的位置,大家的争议很多,其实对于各种说法来说都有各自的道理,但是有一点基本上大家都是一致的,这就是: 始终使用大括号 ,无论这个语句有多么的短,请始终使用大括号。例如:

/* 这些是对的 */   if (condition) {       doStuff();   }   while (condition) {       doStuff();   }   for ($i = 0; $i < size; $i++) {       doStuff();   }
?

对于大括号的位置,即: 类、函数以及控制语句的大括号始终都在同一行 。例如:

class MyClass {    public function foo() {        if (cond) {            doSomething();        }    } }?

符号前后使用空格

这是不用太费事就可以保持代码可读性的另一个简单,容易的步骤。 无论何时你写一个赋值,表达式,等等,始终在符号之间保留一个空格。基本上,把代码当作英语来写。在变量名和运算符之间插入空格。不要在起始括弧后或者终止括弧前加空格。不要在逗号或者分号之前加空格。一些例子很好地展示了这一点。例如:

  /* 每一对给出了错误方式,紧跟正确方式。 */   $i=0;   $i = 0;     if($i<7) ...   if ($i < 7) ...     if ( ($i < 7)&&($j > 8) ) ...   if (($i < 7) && ($j > 8)) ...   do_stuff( $i, "foo", $b );  do_stuff($i, "foo", $b);   for($i=0; $i<$size; $i++) ...  for($i = 0; $i < $size; $i++) ...   $i=($j < $size)?0:1;  $i = ($j < $size) ? 0 : 1;?

运算符优先级

你知道 PHP 中所有运算符的详细的优先级吗?我不知道。不要猜。始终用括号强制一个表达式的优先级可以使优先级明显,这样你知道它会做些什么。例如:

 /* 结果是什么?谁知道? */  $bool = ($i < 7 && $j > 8 || $k == 4);   /* 现在你确定这里我在做什么了。 */  $bool = (($i < 7) && (($j < 8) || ($k == 4)))?

数据库命名规范

  • 数据库以及数据表的命名与类的命名相同,采用首字母大写的驼峰方式命名。需要注意的是: 所有数据表的名字必须是复数的写法。
  • 所有字段的名称应该是由描述性的单词组成,命名的规则和变量命名规范保持一致。
  • 为了配合 ORM 模型,我们要求 所有的主键统一命名为 id

其他规范

if 以及else if的写法

当条件语句中的条件存在多个,并且有变量值的判断的时候,需要把变量的判断语句放在其他的条件语句之前。

 /* 正确的写法 */ if (1 === $val && function_exists(‘ob_gzhandler’)) {     ... ... }  /* 错误的写法 */ if (function_exists(‘ob_gzhandler’) && 1 === $val) { }
?

虽然在 PHP 中else if 和 elseif 的作用基本上是一样的。但是为了代码的统一性(也有传言 else if 会出现不稳定的情况),我们要求将 elseif 之间不保留空格:

 if (2 == $n) {    ... ...} elseif (1 == $n) {    ... ...}

上面的代码中,我用到了 1 === $n 这样的写法,而没有采用常见的 $n === 1 写法的,这么做目的是为了避免我们在写双等号时错误的写成了一个等号,而 PHP 并不会报错,这样会造成在调试过程中浪费更多的时间。

在这里我们不强行要求这种写法,但是还是强烈建议: 在写等于的逻辑判断时将常量放在等号的左侧

if 语句的简写方式

为了使代码看起来简短一点,对于下面的这种简单的if语句允许采用一种简写的方式:

 // 通常的写法 if ($a == $b) {     $c = 'foo';}  // 简写的方式 $a == $b && $c = 'foo';

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号