---
title: "清楚的PHP代码：在代码约定和代码概念之间"
url: https://www.exakat.io/%e6%b8%85%e6%a5%9a%e7%9a%84php%e4%bb%a3%e7%a0%81%ef%bc%9a%e5%9c%a8%e4%bb%a3%e7%a0%81%e7%ba%a6%e5%ae%9a%e5%92%8c%e4%bb%a3%e7%a0%81%e6%a6%82%e5%bf%b5%e4%b9%8b%e9%97%b4/
date: 2015-08-16
modified: 2015-10-17
author: "David 戴炜"
description: "[caption id=\"attachment_483\" align=\"alignleft\" width=\"313\"]clear PHP 代码规则参考[/caption] 在为ClearPHP收集规则的时候一个总是回来的问题就是定义规则来源的领域。代码约定和概念覆盖不同的域而且很少会相互重叠。ClearPHP规则的目标是尽量接近语言和它的技巧，远离语义(semantics）和架构。为什么呢？ 代码约定 代码约定定义代码撰写规则。它们包括操作符周围的空格数量(http://symfony.com/doc/current/contributing/code/standards.html)，代码行缩进的距离(https://make.wordpress.org/core/handbook/coding-standards/php/)和变量名字的意义(http://nette.org/en/coding-standard)。它们一般被PHP code sniffer能汇报代码违规的工具支持；或者用PHP CS Fixer，它试图尽量地来修复任何违规代码。这样有利于避免产生“杂交骆驼和蛇”(https://twitter.com/DragonBe/status/555396473341607936)一样的现象。各种各样不同的项目都应该需要有一个这样的约定来认真跟随。 概念 概念，在另一方面，是试图在更高的一个视角来战斗这个问题。这里是设计模式，依赖注入(dependency injections）和单元测试的领域。你可以发现它们被收集在[PHP the right way](https://twitter.com/DragonBe/status/555396473341607936)网站上。通过工具[phpmetrics](http://www.phpmetrics.org/)和[phpmd](http://phpmd.org/)自动化地反馈矩阵；它们给予全局和本地值的质量报告并且促使你尽量减少[cyclomatic complexity](http://phpmd.org/rules/codesize.html)或[Halstead metrics](http://en.wikipedia.org/wiki/Halstead_complexity_measures)。 Clear PHP code 在这之间，还有一系列的正确推荐不属于上面任何涵盖的地方。比如，著名的strpos()比较规则该属于哪个地方呢？strpos必须用===来比较来避免\"匹配找不到\"的错误情况因为实际上是在第一个索引0的位置上，错误的认为没有找到的情况。还有，foreach()循环时需要unset它们的指引的情况来避免重用（和错用）？两个例子都不属于代码约定或代码概念。 解决方案是避免它们，积累经验。这个基本上意味着一旦有它们的经验，一些免疫力将会建立，一些小技巧将会像是玩“死飞”一样的。所以，一个更好的方案是包括代码审计(code review)来捕捉那些细违反小规则的情况并且去除它们。 因为那些技巧很多，ClearPHP把自己的一个目标设定为把它们归结到一个参考里。目前，已经有88(本文写下时)条规则，每条规则包括文档，标题和ID。那基本上帮你自己建构自己的参考的工作完成了一半：你只需要简单地选择一个或多个你需要的，然后把你下一次的代码审计基于它。也许，你将会有一些对更不常见的PHP的情形下的经验，而且愿意分享给我们community的所有其他人。期待在那里见到你！ English version:..."
categories:
  - "Company"
image: https://www.exakat.io/wp-content/uploads/2015/01/books.3201.jpg
word_count: 31
---

# 清楚的PHP代码：在代码约定和代码概念之间

[![clear PHP 代码规则参考](http://178.62.231.40/wp-content/uploads/2015/01/books.320.jpg)](http://178.62.231.40/wp-content/uploads/2015/01/books.320.jpg)clear PHP 代码规则参考

在为ClearPHP收集规则的时候一个总是回来的问题就是定义规则来源的领域。代码约定和概念覆盖不同的域而且很少会相互重叠。ClearPHP规则的目标是尽量接近语言和它的技巧，远离语义(semantics）和架构。为什么呢？

## 代码约定

代码约定定义代码撰写规则。它们包括操作符周围的空格数量(http://symfony.com/doc/current/contributing/code/standards.html)，代码行缩进的距离(https://make.wordpress.org/core/handbook/coding-standards/php/)和变量名字的意义(http://nette.org/en/coding-standard)。它们一般被PHP code sniffer能汇报代码违规的工具支持；或者用PHP CS Fixer，它试图尽量地来修复任何违规代码。这样有利于避免产生“杂交骆驼和蛇”(https://twitter.com/DragonBe/status/555396473341607936)一样的现象。各种各样不同的项目都应该需要有一个这样的约定来认真跟随。

## 概念

概念，在另一方面，是试图在更高的一个视角来战斗这个问题。这里是设计模式，依赖注入(dependency injections）和单元测试的领域。你可以发现它们被收集在[PHP the right way](https://twitter.com/DragonBe/status/555396473341607936)网站上。通过工具**[phpmetrics]**(http://www.phpmetrics.org/)和**[phpmd]**(http://phpmd.org/)自动化地反馈矩阵；它们给予全局和本地值的质量报告并且促使你尽量减少**[cyclomatic complexity]**(http://phpmd.org/rules/codesize.html)或**[Halstead metrics]**(http://en.wikipedia.org/wiki/Halstead_complexity_measures)。

## Clear PHP code

在这之间，还有一系列的正确推荐不属于上面任何涵盖的地方。比如，著名的strpos()比较规则该属于哪个地方呢？strpos必须用===来比较来避免"匹配找不到"的错误情况因为实际上是在第一个索引0的位置上，错误的认为没有找到的情况。还有，foreach()循环时需要unset它们的指引的情况来避免重用（和错用）？两个例子都不属于代码约定或代码概念。

解决方案是避免它们，积累经验。这个基本上意味着一旦有它们的经验，一些免疫力将会建立，一些小技巧将会像是玩“死飞”一样的。所以，一个更好的方案是包括代码审计(code review)来捕捉那些细违反小规则的情况并且去除它们。

因为那些技巧很多，ClearPHP把自己的一个目标设定为把它们归结到一个参考里。目前，已经有88(本文写下时)条规则，每条规则包括文档，标题和ID。那基本上帮你自己建构自己的参考的工作完成了一半：你只需要简单地选择一个或多个你需要的，然后把你下一次的代码审计基于它。也许，你将会有一些对更不常见的PHP的情形下的经验，而且愿意分享给我们community的所有其他人。期待在那里见到你！

[![uk](http://178.62.231.40/wp-content/uploads/2015/06/uk.png)](http://178.62.231.40/wp-content/uploads/2015/06/uk.png)English version: http://178.62.231.40/clear-php-code-between-coding-convention-and-conception/