
phpmnd é uma ferramenta que visa ajudá -lo a detectar números mágicos no seu código PHP. Por padrão, 0 e 1 não são considerados números mágicos.
Um número mágico é um literal numérico que não é definido como uma constante, mas que pode mudar posteriormente e, portanto, pode ser difícil de atualizar. É considerado uma prática de programação ruim para usar os números diretamente em qualquer código -fonte sem uma explicação. Na maioria dos casos, isso torna os programas mais difíceis de ler, entender e manter.
Considere o seguinte código hipotético:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}que deve ser reformado para:
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 " );
}
}
}Isso melhora claramente a legibilidade do código e também reduz seu custo de manutenção.
Claro que nem todo número literal é um número mágico.
$ is_even = $ number % 2 === 0Certamente, neste caso, o número 2 não é um número mágico.
Minha regra prática:
If the number came from business specs and is used directly - it's a magic number.
Você pode adicionar esta ferramenta como uma dependência local de desenvolvimento por projeto ao seu projeto usando o Composer:
$ composer require --dev povils/phpmnd Depois, você pode invocá -lo usando o executável vendor/bin/phpmnd .
Para instalá -lo globalmente, basta executar:
$ composer global require povils/phpmnd Posteriormente, verifique se você tem o diretório global de binários compositores em seu PATH . Exemplo para alguns sistemas 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 A opção --allow-array-mapping permite as teclas como strings ao usar a extensão "Array".
A opção --exclude-file excluirá um arquivo da análise de código. Vários valores são permitidos.
A opção --exclude-path excluirá um caminho, que deve ser relativo à fonte, a partir da análise de código. Vários valores são permitidos.
A opção --exclude excluirá um diretório, que deve ser relativo à fonte, a partir da análise de código. Vários valores são permitidos (por exemplo --exclude = tests --exclude = exemplos).
A opção --extensions permite estender a análise de código. As extensões fornecidas devem ser separadas por vírgula.
A opção --hint sugerirá substituições para números mágicos com base nas suas constantes de base de código.
A opção --ignore-funcs excluirá uma lista de funções separadas por vírgula da análise de código, ao usar a extensão "argumento". Padrões para intval , floatval , strval .
A opção --ignore-numbers excluirá uma lista de números separados de vírgula da análise de código.
A opção --ignore-strings excluirá strings da análise de código, ao usar a opção "Strings".
A opção --include-numeric-string força strings numéricos como "1234" a também ser tratados como um número.
A opção --progress exibirá uma barra de progresso.
A opção --strings incluirá a pesquisa literal de strings na análise de código.
A opção --suffixes configurará uma lista separada por vírgula de extensões de nome do código -fonte válido.
A opção --whitelist processará apenas os arquivos listados no arquivo especificado. Isso é útil para análise incremental.
A opção --xml-output gerará um relatório em um formato XML para o caminho especificado pela opção. Por padrão, ele analisa condições, declarações de retorno e casos de troca.
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;Se as extensões começarem com um menos, isso significa que elas serão removidas da análise do código. Eu recomendaria limpar seu código usando a extensão padrão antes de usar qualquer uma dessas extensões.
Às vezes, números mágicos são necessários. Por exemplo, implementando uma fórmula matemática conhecida, por padrão intval , floatval e strval Mark um número como não mágica.
por exemplo
$percent = $number / 100;
mostraria 100 como um número mágico
$percent = $number / intval(100);
marcaria 100 como não mágica.
Consulte Contribuindo.md para obter mais informações.
A licença do MIT (MIT). Consulte a licença para obter mais informações.