phpmnd/phpmnd

此包已废弃且不再维护。未建议替代包。

检测代码库中魔法数字的工具

维护者

详细信息

github.com/sidz/phpmnd

源代码

问题

安装数: 17,371

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分叉: 90

开放问题: 0

类型:应用程序

v2.4.0 2021-02-19 13:37 UTC

README

Minimum PHP version: 7.1.0 CI

phpmnd 是一个旨在 帮助 您检测 PHP 代码中的魔法数字的工具。默认情况下,0 和 1 不被认为是魔法数字。

什么是魔法数字?

魔法数字是一个未定义为常量的数字字面量,但可能在以后某个阶段发生变化,因此可能难以更新。在源代码中直接使用数字而不加解释被认为是一种不良的编程实践。在大多数情况下,这会使程序更难阅读、理解和维护。

考虑以下假设的代码

class Foo
{
    public function setPassword($password)
    {
         // don't do this
         if (mb_strlen($password) > 7) {
              throw new InvalidArgumentException("password");
         }
    }
}

应该重构为

class Foo
{
    const MAX_PASSWORD_LENGTH = 7; // not const SEVEN = 7 :)

    public function setPassword($password)
    {
         if (mb_strlen($password) > self::MAX_PASSWORD_LENGTH) {
              throw new InvalidArgumentException("password");
         }
    }
}

这明显提高了代码的可读性,并减少了维护成本。

当然,不是每个字面数字都是魔法数字。

$is_even = $number % 2 === 0

在这种情况下,数字 2 显然不是魔法数字。

我的经验法则

If the number came from business specs and is used directly - it's a magic number.

安装

本地安装

您可以通过使用 Composer 将此工具添加为本地、按项目、开发依赖项。

$ composer require --dev phpmnd/phpmnd

之后,您可以使用 vendor/bin/phpmnd 可执行文件调用它。

全局安装

要全局安装,只需运行

$ composer global require phpmnd/phpmnd

之后,请确保您的 PATH 中有全局 Composer 二进制目录。例如,某些 Unix 系统的示例

$ export PATH="$PATH:$HOME/.composer/vendor/bin"

使用示例

演示
demo

基本用法

$ phpmnd wordpress --ignore-numbers=2,-1 --ignore-funcs=round,sleep --exclude=tests --progress \
--extensions=default_parameter,-return,argument

--allow-array-mapping 选项在 "array" 扩展中使用时允许键为字符串。

--exclude-file 选项将排除文件从代码分析中。允许多个值。

--exclude-path 选项将排除路径,该路径必须是相对于源代码的,从代码分析中排除。允许多个值。

--exclude 选项将排除目录,该目录必须是相对于源代码的,从代码分析中排除。允许多个值(例如,--exclude=tests --exclude=examples)。

--extensions 选项允许您扩展代码分析。提供的扩展必须用逗号分隔。

--ignore-funcs 选项将在使用 "argument" 扩展时排除逗号分隔的函数列表。默认为 intvalfloatvalstrval

--ignore-numbers 选项将排除逗号分隔的数字列表,从代码分析中排除。

--ignore-strings 选项将在使用 "strings" 选项时排除字符串。

--include-numeric-string 选项将强制将数字字符串(如 "1234")也视为数字。

--progress 选项将显示进度条。

--strings 选项将包括代码分析中的字符串字面量搜索。

--suffixes 选项将配置逗号分隔的有效源代码文件名扩展列表。

--whitelist 选项将只处理指定文件中列出的文件。这对于增量分析很有用。

使用--xml-output选项将在指定路径生成一个XML格式的报告。默认情况下,它分析条件、返回语句和switch case。

从可用扩展列表中选择

  • 参数
round($number, 4);
  • 数组
$array = [200, 201];
  • 赋值
$var = 10;
  • 默认参数
function foo($default = 3);
  • 操作
$bar = $foo * 20;
  • 属性
private $bar = 10;
  • 返回(默认)
return 5;
  • 条件(默认)
$var < 7;
  • switch_case(默认)
case 3;
  • 所有 包括所有扩展。

如果扩展以减号开头,则表示这些扩展将从代码分析中移除。在使用这些扩展之前,建议您先使用默认扩展来清理代码。

忽略分析中的数字

有时需要使用魔法数字。例如,通过实现已知的数学公式,默认情况下,intvalfloatvalstrval会将数字标记为非魔法。

例如

$percent  = $number / 100;

将显示100为魔法数字

$percent = $number / intval(100);

将标记100为非魔法数字。

贡献

请考虑阅读我们的简短贡献指南

许可

MIT许可(MIT)。有关更多信息,请参阅LICENSE