
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 povils/phpmnd之后,您可以使用vendor/bin/phpmnd可执行文件调用它。
要在全球安装它,简单地运行:
$ composer global require povils/phpmnd之后,请确保您的PATH中有全球作曲家二进制文件目录。一些Unix系统的示例:
$ export PATH= " $PATH : $HOME /.composer/vendor/bin " 
$ phpmnd wordpress --ignore-numbers=2,-1 --ignore-funcs=round,sleep --exclude=tests --progress
--extensions=default_parameter,-return,argument --allow-array-mapping使用“数组”扩展程序时,允许键作为字符串。
--exclude-file选项将排除代码分析中的文件。允许多个值。
--exclude-path选项将从代码分析中排除必须与源相关的路径。允许多个值。
--exclude选项将从代码分析中排除必须与源相关的目录。允许多个值(例如-exclude = tests -exclude =示例)。
--extensions选项使您可以扩展代码分析。提供的扩展名必须分开。
--hint选项将根据您的代码库常数替换魔术数字。
当使用“参数”扩展程序时, --ignore-funcs选项将排除逗号分隔函数的列表。默认为intval , floatval , strval 。
--ignore-numbers选项将排除从代码分析中分离的逗号分隔数列表。
使用“字符串”选项时, --ignore-strings选项将排除代码分析的字符串。
--include-numeric-string选项强制数字字符串(例如“ 1234”)也被视为数字。
--progress选项将显示一个进度栏。
--strings选项将在代码分析中包括字符串搜索。
--suffixes选项将配置有效源代码文件扩展名的逗号分隔列表。
--whitelist选项将仅处理指定的文件中列出的文件。这对于增量分析很有用。
--xml-output选项将以选项指定的路径以XML格式生成报告。默认情况下,它可以分析条件,返回语句和切换案例。
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;如果扩展以减去开头,则意味着这些将从代码分析中删除。我建议通过在使用任何这些扩展名之前使用默认扩展名来清理您的代码。
有时需要魔术数字。例如,实现已知的数学公式,默认intval下, floatval和strval将数字标记为非魔术。
例如
$percent = $number / 100;
将显示100作为魔术数字
$percent = $number / intval(100);
会标记100个不是魔术。
有关更多信息,请参见dragting.md。
麻省理工学院许可证(麻省理工学院)。请参阅许可证以获取更多信息。