强制编码参考上周,我遇到了‘PHP做和不做我不喜欢的程序员‘ on reddit’s PHP group。它列出了作者不希望在PHP代码中找到的11个要点。我一直热衷于从此类参考文献中进行阅读:他们总是持有一些有趣的见解,一些技巧以及一些更具争议性的方面。这个没有’再次令人失望。它只是缺乏一种执行编码参考的方法。

强制编码参考

最有趣的一点是,编码参考用于评估代码。由于进行了静态分析,它们很可能是自动化的。我认为这对Exakat是一个很好的挑战。

这是清单。这 奥利弗·拉德威尔(Oliver Radwell)的原始博客 包含详细信息,示例和解释,因此请阅读。

  • 嵌套的if语句过多
  • 额外的括号和花括号
  • 不必要的铸造
  • 无用的检查
  • 缓慢的PHP内置函数
  • 长功能
  • 函数参数过多
  • 排长龙
  • 长的if-else块
  • 功能/类名大小写错误
  • 缺乏编码标准

审查规则

‘嵌套的if语句过多’ 这是一个好规则,其中最难的部分是定义嵌套级别。我知道(至少)一家没有’不能接受一个以上的水平。 Exakat会报告2个以上的嵌套,而Blog示例就是一个极端的例子。必须对此进行定义。

同样的问题也随之而来 ‘Long if-else blocks’ (如果要在切换之前切换多少个?), ‘long functions’ (长函数有几行)或 ‘函数参数过多’。每次都没有此限制的一般值,应逐个项目地选择它。

‘Unnecessary casting’ 令我感到惊讶。我确实同意(string)trim()是没有用的。由于我很少遇到这种情况,所以我不必担心。我可以容易地想象,如果它很频繁的话。因此,我为此创建了一个exakat分析:再加上PHP手册,这实际上是一个简单的静态分析。

‘Useless checks’ 也是从PHP手册中提取的,它是一个很好的建议:不要使用 isset() AND empty(),此外,它们是多余的。有时,必须记住PHP手册中有很多好的建议。

‘额外的支架和花括号’ also list classic ‘require(‘file.php’)’和实际上根本不值得讨论的«$ var»情况。通常,每个人都同意不应该这样做。解决代码中的此类问题实际上比开始对其进行解释要快。问题是,没有人有时间找到所有这些。虽然,当通过工具列出它们时,它们使编码时间变得非常轻松。

‘缺乏编码标准’ 是列表的最后一个,并且比以前的列表更通用。这是应该提供给静态分析工具的工具,例如 PHP代码嗅探器。有太多规则可供选择或省略。我同意,作为一个项目’s coding convention.

总而言之,这种参考是很客观的。每次违规都会直接关注代码中需要它的行。这非常重要:静态分析目标的确切位置。有时,修复方法如规则所规定的那样简单,有时却大不相同。无论如何,将我带到这样的地方是编码参考的最重要结果。

Exakat现在有一个‘RadwellCode’报告,涵盖了参考中的所有要点,但编码约定,long函数和大量参数规则(由于缺少目标值)除外。我在自己的代码上运行了它(php exakat报告-p<project>格式的RadwellCode-文件<file>),发现870多个文件中有211个违规,137137 LOC则被发现。他们大多数是‘嵌套的if语句过多’。这是其他一些报告:

  • Zend Framework 1.12:899
  • 开放式诊所:716
  • WordPress的:693
  • openconf的:450
  • 的PHPmyadmin的:311
  • SPIP:273
  • Exakat:211
  • 作曲家:39
  • 点数:38
  • inpipire:25
  • 西里斯(Sylius):12
  • 贝哈特:8
  • 轮询:7
  • 决策树:1
  • ofxparser:0

基于简短而随意的项目列表,确实有一些项目尽管不情愿地遵循Radwell编码参考。对于区分项目,这似乎是一个很好的编码参考。

编码参考永远是你的

像这样的编码参考书很好。它有助于指导编码,并评估外部贡献。参考之后,重要的是要有一个加强工具来检查存储库而不浪费开发人员’s时间:这是静态分析可以提供帮助的时间。下载 Exakat 并在您的代码上运行报告。

就规则而言,很明显我的代码没有’不符合Radwell’参考。我确实有我自己的,知道哪个更好是不重要的。我确实向奥利弗·拉德威尔(Oliver Radwell)学习,’是重要的部分。