
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 require --dev povils/phpmnd После этого вы можете вызвать его, используя исполняемый файл vendor/bin/phpmnd .
Чтобы установить его глобально, просто запустите:
$ composer global require povils/phpmnd После этого убедитесь, что у вас есть глобальный каталог Binary Composer 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 как не волшебство.
Пожалуйста, смотрите Anforming.md для получения дополнительной информации.
Лицензия MIT (MIT). Пожалуйста, смотрите лицензию для получения дополнительной информации.