PHP CodeSniffer 有多有用?代码标准的总体执行情况? [关闭]

2024-04-22

我正在考虑设立的想法PHP 代码嗅探器 http://pear.php.net/manual/en/package.php.php-codesniffer.intro.php在我们的持续集成服务器上,以努力提高我们的代码库的质量。阅读文档后,我对标准化和执行我们的编码标准的想法感到非常兴奋。然而,我仍然想知道我们产品的实际改进。我很清楚嗅探器只能检测对定义的编码标准的违反,但是干净、一致的代码库可以提供什么类型的好处?重构一个超过 10 万行代码的项目以符合 PEAR 标准是否值得?

对于那些不熟悉 PHP CodeSniffer 或代码气味的人,这里是一个示例输出:

文件:/path/to/code/myfile.php
发现 5 个错误,影响 2 行
--
2 |错误|缺少文件文档注释
20 | 20错误| PHP关键字必须小写;预期为“假”,但发现为“假”
47 | 47错误|行缩进不正确;预计有 4 个空格,但找到了 1 个
51 | 51错误|缺少函数文档注释
88 | 88错误|行缩进不正确;预计有 9 个空格,但发现有 6 个

严格来说,用户/客户不会注意到经过重构以符合标准的产品有任何差异,但我想知道是否还有其他隐藏的好处

现在我们的代码一点也不马虎,我们尝试遵循我们自己的个人标准,这些标准在很大程度上源自Pear 的编码标准 http://pear.php.net/manual/en/standards.php但训练有素的眼睛可以发现差异。

所以我的问题是他们在多大程度上提高了产品的质量。由此带来了哪些潜在的好处?

我是否只是强迫性地渴望让我们的产品更接近一组标准?值得吗?如果是这样,您使用什么样的策略来实现代码嗅探器并纠正检测到的后续违规行为?


首先,我是 PHP_CodeSniffer 的维护者,所以我在这方面显然有偏见。但在我作为 PHP 开发人员的 10 年里,我也参与过一些大型代码库的工作,所以我希望我能提供一些具体的理由来说明为什么编码标准是一件好事。我可以写一个关于这个主题的博客系列,但我只会给你一个关于 PHP_CodeSniffer 是如何产生的小故事,这样你就可以理解该工具为我解决的问题。

我参与过一些大型 CMS 项目。第一个项目背后有一堆代码和一个相对较小的开发团队。我们没有标准。但我们没有遇到真正的问题。团队很小,而且在一起待了很长一段时间。我们已经习惯了彼此。

然后我们构建了一个新的 CMS。我们从头开始,只有几个开发人员。当时我是一个只有两名开发人员的团队的一员。同样,编码标准没有给我们带来任何问题。我和其他开发人员来自相同的背景,并且已经制定了一些我们遵循的准则。那时我们不需要 PHPCS。

但该团队一次培养了一名开发人员,最终达到了 12 名全职开发人员,其中不少人来了又走。有些来自旧的 CMS,有些来自公司外部。他们都有不同的背景和不同的发展方式。谁写了什么代码是显而易见的,因为风格如此不同。每当你处理复杂的事情时,你首先必须适应他们的风格,因为这不是你习惯的查看代码的方式。就像第一次读莎士比亚一样。您需要先习惯它,然后才能以自然的速度阅读。

对于开发人员来说,不得不停下来找出另一种编码风格的额外时间纯粹是浪费时间。当你陷入间距、缩进和括号位置的困境时,这是一个想法溜走的机会。到最后,这些事情都不重要了。但让我告诉你,如果它们导致开发人员中断流程,它们就非常重要。因此,我们需要一种方法来让他们摆脱困境,让开发人员做他们最擅长的事情。

与此同时,我们对 JavaScript 进行了更多的挖掘。一种新的语言,风格通常被抛弃。代码是从示例站点复制/粘贴并混合在一起的。当学习用新语言开发复杂代码时,找到一种方法使我们的 JS 看起来与 PHP 相似是有意义的。我们可以稍后将其最小化,但我们需要能够在语言之间快速切换,再次保持我们的流程。

所以 PHP_CodeSniffer 就是为此而生的。它可以帮助开发人员采用相同的编码风格,从而完全消除格式和其他麻烦问题。它允许您在某种程度上像对待 PHP 一样对待 JS。我用它来检测特定于产品的气味,例如未翻译的字符串或未使用我们正确的类包含代码的开发人员。我还将它用于特定于语言的气味,例如确保不会留下杀死 IE 的 JS 逗号。您可以将它用于任何您想要的用途。它带有大量的嗅探,可以使用XML 规则集文件 http://pear.php.net/manual/en/package.php.php-codesniffer.annotated-ruleset.php。您也可以自己编写。您可以集成第 3 方工具,使其成为静态代码分析的一站式服务。您可以根据自己的喜好认真对待标准和代码气味。

PHP_CodeSniffer 与任何开发工具一样,应该适合您。你不为它工作。如果它产生了太多您不关心的错误,请自定义标准以删除您不想要的错误,或者将错误转变为警告。但是,如果我的故事听起来像您正在经历或将来可能经历的事情,那么值得仔细研究 PHP_CodeSniffer 看看它是否可以帮助您。

我希望这可以帮助您和其他人理解为什么编码标准对于某些项目和开发人员来说非常重要。这与细节无关。这是关于从导致开发人员失去焦点的事物列表中删除编码风格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP CodeSniffer 有多有用?代码标准的总体执行情况? [关闭] 的相关文章

  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 如果产品重量超过1000克,如何以公斤为单位显示

    在 Storefront 主题中 我使用下面的代码将格式化重量从 1000g 更改为 1kg add action woocommerce after shop loop item title show weight 10 function
  • 克隆和引用传递问题

    所以在过去的几天里 我一直在绞尽脑汁地试图让一个类能够正确克隆 问题是克隆不会删除 重做任何引用传递 结果是 主数据对象仍然作为引用传递 从而完全抵消了克隆的效果 这是问题的简化版本 class my class private data
  • PHP cURL 重定向到本地主机

    我正在尝试使用带有 cURL 的 php 脚本登录外部网页 我是 cURL 的新手 所以我觉得我错过了很多东西 我找到了几个例子并修改了它们以允许访问https页面 最终 我的目标是能够登录页面并在登录后通过指定的链接下载 csv 到目前为
  • 在Windows上安装php Composer时出现错误

    在安装 Composer 以使用 Laravel 框架时 我遇到了一些错误 Download failed file get contents SSL operation failed with code 1 OpenSSL Error m
  • WordPress 安装中发现的恶意 PHP 代码有什么作用?

    我能够解码在一些 WordPress 文件中找到的以下 PHP 脚本 只是出于好奇 有人可以告诉我这段代码实际上是做什么的吗 看起来它已经以某种方式复制到同一服务器上的其他 WordPress 安装中
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • $_REQUEST、$_GET、$_POST 哪一个最快?

    这些代码中哪一个会更快 temp REQUEST s or if isset GET s temp GET s else temp POST s REQUEST http php net manual en reserved variabl
  • 在 php 和 mysql 中使用 utf8mb4

    我读过 mysql gt 5 5 3 完全支持每个可能的字符 如果您使用编码utf8mb4对于某个表 列http mathiasbynens be notes mysql utf8mb4 http mathiasbynens be note
  • php递归合并

    我需要以某种不同的方式合并一些数组 我使用 array merge recursive 然而 有一些事情我需要改变 但我不知道如何改变 这是来自 php net 的引用 但是 如果数组具有相同的数字键 则后面的值 不会覆盖原始值 但会追加
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • 如何在 PHP >= 5.3 严格模式下向对象添加属性而不产生错误

    这必须很简单 但我似乎找不到答案 我有一个通用的 stdClass 对象 foo没有属性 我想添加一个新属性 bar尚未定义 如果我这样做 foo new StdClass foo gt bar 1234 严格模式下的 PHP 会抱怨 将属
  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • MySQL 正在将我的时间戳值转换为 0000-00-00

    我是 PHP 新手 目前仍在学习中 我认为我的注册表有问题 username password email全部成功插入MySQL registered and last seen不要 我以为我正在使用getTimestamp 错了 但它呼应

随机推荐