
phpmnd es una herramienta que tiene como objetivo ayudarlo a detectar números mágicos en su código PHP. Por defecto, 0 y 1 no se consideran números mágicos.
Un número mágico es un literal numérico que no se define como una constante, pero que puede cambiar en una etapa posterior y, por lo tanto, puede ser difícil de actualizar. Se considera una mala práctica de programación para usar números directamente en cualquier código fuente sin una explicación. En la mayoría de los casos, esto hace que los programas sean más difíciles de leer, comprender y mantener.
Considere el siguiente código hipotético:
class Foo
{
public function setPassword ( $ password )
{
// don't do this
if ( mb_strlen ( $ password ) > 7 ) {
throw new InvalidArgumentException ( " password " );
}
}
}que debe refactorizarse a:
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 " );
}
}
}Esto claramente mejora la legibilidad del código y también reduce su costo de mantenimiento.
Por supuesto, no todos los números literal son un número mágico.
$ is_even = $ number % 2 === 0Seguramente en este caso el número 2 no es un número mágico.
Mi regla general:
If the number came from business specs and is used directly - it's a magic number.
Puede agregar esta herramienta como una dependencia local de desarrollo por proyecto a su proyecto utilizando el compositor:
$ composer require --dev povils/phpmnd Luego puede invocarlo usando el ejecutable vendor/bin/phpmnd .
Para instalarlo a nivel mundial, simplemente ejecute:
$ composer global require povils/phpmnd Posteriormente, asegúrese de tener el directorio de binarios compositores globales en su PATH . Ejemplo para algunos 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 La opción --allow-array-mapping permite las teclas como cadenas cuando se usa la extensión de "matriz".
La opción --exclude-file excluirá un archivo del análisis de código. Se permiten múltiples valores.
La opción --exclude-path excluirá una ruta, que debe ser relativa a la fuente, del análisis del código. Se permiten múltiples valores.
La opción --exclude excluirá un directorio, que debe ser relativo a la fuente, del análisis del código. Se permiten múltiples valores (p. Ej., Exclude = tests --exclude = ejemplos).
La opción --extensions le permite extender el análisis de código. Las extensiones proporcionadas deben estar separadas por coma.
La opción --hint sugerirá reemplazos para números mágicos basados en sus constantes de base de código.
La opción --ignore-funcs excluirá una lista de funciones separadas por comas del análisis de código, cuando se usa la extensión de "argumento". El valor predeterminado a intval , floatval , strval .
La opción --ignore-numbers excluirá una lista de números separados por comas del análisis de código.
La opción --ignore-strings excluirá las cadenas del análisis del código, cuando se usa la opción "Cuerdas".
La opción --include-numeric-string obliga a las cadenas numéricas como "1234" para ser tratadas como un número.
La opción --progress mostrará una barra de progreso.
La opción --strings incluirá la búsqueda literal de cadenas en el análisis de código.
La opción --suffixes configurará una lista separada por comas de extensiones de nombre de archivo de código fuente válidos.
La opción --whitelist solo procesará los archivos enumerados en el archivo especificado. Esto es útil para el análisis incremental.
La opción --xml-output generará un informe en un formato XML a la ruta especificada por la opción. Por defecto, analiza las condiciones, las declaraciones de retorno y los casos de conmutación.
round ( $ number , 4 ); $ array = [ 200 , 201 ]; $ var = 10 ; function foo( $ default = 3 ); $ bar = $ foo * 20 ; private $ bar = 10 ; return 5 ; $ var < 7 ;case 3 ;Si las extensiones comienzan con un menos, significa que se eliminarán del análisis de código. Recomendaría limpiar su código utilizando la extensión predeterminada antes de usar cualquiera de estas extensiones.
A veces se requieren números mágicos. Por ejemplo, implementar una fórmula matemática conocida, por intval , floatval y strval marcan un número como no magia.
p.ej
$percent = $number / 100;
mostraría 100 como un número mágico
$percent = $number / intval(100);
Marcaría 100 como no magia.
Consulte Contriping.MD para obtener más información.
La licencia MIT (MIT). Consulte la licencia para obtener más información.