
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 그 후 PATH 에 Global Composer Binaries 디렉토리가 있는지 확인하십시오. 일부 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 옵션은 코드 분석에서 소스와 관련이 있어야하는 디렉토리를 제외합니다. 여러 값이 허용됩니다 (예 : eG -exclude = tests -exclude = examples).
--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을 마법이 아닌 것으로 표시합니다.
자세한 내용은 Contributing.md를 참조하십시오.
MIT 라이센스 (MIT). 자세한 내용은 라이센스를 참조하십시오.