이것은 PHP 코드에서 잠재적 인 버그와 예기치 않은 동작을 감지하기위한 맞춤형 PHP_CODESNIFFER (3.X) 스니핑의 모음입니다. 자체적으로 규칙 세트로 사용될 수 있지만 주로 다른 표준에 통합 될 수있는 별도의 스니핑 세트로 의도됩니다.
우리는 블로그에서 이러한 스 니프의 동기를 설명했습니다.
작곡가를 사용하여 개발 의존성으로 설치하십시오.
$ composer require --dev moxio/php-codesniffer-sniffs
이 스 니프 세트에 대해 파일을 확인하십시오.
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
더 많은 스 니프가 곧 추가 될 것입니다.
moxiosniffs.php.disallowbarecontinueinswitch : switch - case 내에서 직접 사용될 때 숫자 인수없이 continue 명세서를 불쾌하게합니다. 이는 switch 루핑 구조로 고려하여 PHP에 의해 야기되는 침묵 버그를 방지합니다.
moxiosniffs.php.disallowimplicitloosecomperison : in_array 및 array_search 와 같은 함수별로 암시 적 비 강력 비교를 분리합니다. 이러한 함수에 대한 $strict -parameter가 명시 적으로 설정되어야합니다. 이는 비 스트릭 비교의 반 직관적 인 행동으로 인해 숨겨진 버그를 방지합니다.
moxiosniffs.php.disallowimplicitloosebase64decode : base64_decode 함수의 암묵적 비 강력한 사용법을 dis으로 변하지 않습니다. 이 기능에 대한 $strict -parameter가 명시 적으로 설정되어야합니다.
Moxiosniffs.php.disallowuniqidwithoutmoreentropy : $more_entropy = true 없이 uniqid() 에 대한 호출을 해제합니다. $more_entropy 가 false (기본값) 인 경우, uniqid() 충돌을 피하기 위해 usleep() 호출합니다. $more_entropy = true 로 항상 uniqid() 호출하면 이러한 문제를 피하십시오.
moxiosniffs.php.dislowarraycombinerswithsinglearray : 두 개 이상의 배열과 인수로 단일 배열 만 제공되는 함수에 대한 호출을 분리시킵니다. 이것은 array_merge(_recursive) , array_replace(_recursive) 및 array_diff 및 array_intersect 의 모든 변형과 같은 함수에 적용됩니다. 그러한 부름은 의미가 없으며, 잘못 배치 된 쉼표 또는 괄호의 결과 일 가능성이 높습니다. 단일 배열을 다시 표시하려면 array_values 만 사용하십시오.
moxiosniffs.php.disallowimplicitmicrotimeasstring : $get_as_float 인수가 명시 적으로 설정되지 않고 microtime() 로 호출을 해제합니다. 기본적으로 microtime 리턴 값 ( "MSEC SEC")으로 문자열을 가지고 있으며, 이는 예상치 못한 상태이며 순진하게 캐스트 할 수 없으므로 오류가 발생하기 쉽습니다. 이 주장을 false 으로 설정하는 것은 여전히 가능하지만,이 경우에는 이것에 대해 생각했을 것입니다.
Moxiosniffs.php.disallowimpliciteratortoArraywithusekeys : $use_keys 인수가 명시 적으로 설정되지 않고 iterator_to_array() 로 호출하지 않습니다. 기본적으로 iterator_to_array 반복자가 제공하는 키를 사용합니다. 이 동작은 종종 연관 어레이에 필요하지만 '목록과 같은'배열에 대한 예상치 못한 결과를 유발할 수 있습니다. 명시 적으로 매개 변수를 설정해야한다고해서 개발자가 당면한 상황에 어떤 동작이 원하는지 생각해야합니다.
moxiosniffs.php.disallowdateTime : DateTime 사용을 해제하고 대신 DateTimeImmutable 의 사용을 촉진합니다. 전자는 돌연변이되는 것이 미묘하지만 불쾌한 벌레로 이어질 수 있습니다. DateTime 사용하지 않으려는 이유에 대한 자세한 내용은이 게시물을 참조하십시오.
moxiosniffs.php.disallowmbdetectencoding : mb_detect_encoding 의 사용법을 방해합니다. 이 함수는 오해의 소지가있는 이름을 가지고 있으며, 실제로는 문자열의 인코딩을 감지 할 수 있으며, 일반적으로 불가능한 문제입니다. 오히려 올바른 일이 될 수 있는 인코딩 목록을 확인합니다 (즉, 문자열은 해당 인코딩에 따라 유효한 바이트 시퀀스입니다). 대신 mb_check_encoding (루프에서)을 사용하면 훨씬 더 명확하게 만듭니다. 이 주제에 대한 더 많은 배경 정보는이 토크를 참조하십시오.
moxiosniffs.php.disallowutf8encodedecode : utf8_encode() 및 utf8_decode() 로 호출 할 수 있습니다. 이러한 기능은 ISO-8859-1로만 전환되기 때문에 오해의 소지가있는 것으로 간주 될 수 있으며 소스/대상 인코딩을 '마술 적으로'감지하지 않기 때문입니다. iconv() 또는 mb_convert_encoding() 사용하면 대신 변환에서 중요한 역할을하는 문자 인코딩이 모두 만듭니다.
moxiosniffs.php.dispecificiedtimecomponent : DateTime::createFromFormat , DateTimeImmutable::createFromFormat , date_create_from_format & date_create_immutable_from_format 를 구체화하지 않은 상태로 구성되지 않는다. 널. 그렇지 않으면 시간 구성 요소가 현재 (생성) 시간으로 설정된 DateTime (불변) 객체를 생성 할 수 있습니다. 이는 아마도 당신이 원하는 것이 아니며 버그의 소스가 될 수 있습니다.
작곡가를 사용하여 종속성 (개발 종속성 포함)을 설치 한 후 실행하십시오
$ ./vendor/bin/phpunit
프로젝트에서 루트 듀러에서.
이 프로젝트는 시맨틱 버전화를 준수합니다.
이 라이브러리의 관점에서, 픽 앤 매치 스 니프 모음 (완전한 코딩 표준이 아님)으로서 새로운 스 니프의 추가는 파손 된 변화로 간주되지 않으므로 주요 버전 번호를 증가시키지 않습니다.
이 스 니프는 MIT 라이센스에 따라 릴리스됩니다.