이것은 PHP 버전 간 호환성을 확인하는 PHP CodeSniffer용 스니프 세트입니다. 이를 통해 코드를 분석하여 PHP의 상위 버전 및 하위 버전과의 호환성을 확인할 수 있습니다.
testVersion
과 명령줄 비교이 프로젝트는 PHP 5.0부터 최신 PHP 릴리스까지 도입된 모든 PHP 호환성 변경 사항을 다루는 것을 목표로 합니다. 이는 진행 중인 프로세스이며 적용 범위는 아직 100%가 아닙니다(실제로 그럴 수 있다면). 진행 상황은 GitHub 문제 추적기에서 추적됩니다.
PHP 4 코드(특히 PHP 4와 PHP 5.0 사이)의 호환성 문제를 확인하는 풀 요청은 여전히 레거시 시스템을 업그레이드하는 데 도움이 필요한 상황이 있으므로 매우 환영합니다. 그러나 PHP 5.1 이전에 도입된 변경 사항에 대한 적용 범위는 현재 활발하게 개발되지 않기 때문에 패치되지 않은 상태로 유지됩니다.
스니프는 PHP CodeSniffer를 실행하는 데 사용하는 PHP 버전에 관계없이 동일한 결과를 제공하도록 설계되었습니다. 테스트 환경에서 사용되는 PHP 버전과 관계없이 일관된 결과를 얻어야 하지만, 최상의 결과를 얻으려면 최신 PHP_CodeSniffer 버전과 함께 최신 PHP 버전에서 스니프를 실행하는 것이 좋습니다.
버전 8.0.0부터는 PHPCompatibility 표준을 PHP CodeSniffer 3.x에서도 사용할 수 있습니다. 버전 9.0.0부터 PHP CodeSniffer 1.5.x 및 하위 2.x 버전 < 2.3.0에 대한 지원이 중단되었습니다. 버전 10.0.0부터 PHP < 5.4 및 PHP CodeSniffer < 3.10.0에 대한 지원이 중단되었습니다.
귀중한 기여를 해주신 모든 기여자에게 감사드립니다.
PHP 7.0 스니프를 지원해 준 WP 엔진에 감사드립니다.
이 라이브러리는 개편되었습니다. 모든 스니프가 카테고리에 배치되었으며 상당수의 스니프 이름이 변경되었습니다.
사용자 정의 규칙 세트에서 exclude
지시문 없이 전체 PHPCompatibility
표준을 사용하고 (아직) PHP_CodeSniffer 3.2.0에 도입된 새로운 스타일의 PHP_CodeSniffer 주석을 사용하지 않는 경우 눈에 띄는 효과가 없으며 모든 것이 이전처럼 작동해야 합니다.
그러나 사용자 정의 규칙 세트에서 PHPCompatibility 스니프에 대한 exclude
지시어를 사용하거나 새로운 스타일의 PHP_CodeSniffer 인라인 주석을 사용하는 경우 업그레이드할 때 이를 업데이트해야 합니다. 이는 한 번만 변경해야 합니다. 변경 로그에는 모든 스니프 이름 변경에 대한 자세한 정보가 포함되어 있습니다.
업그레이드하기 전에 버전 9.0.0의 변경 로그를 주의 깊게 읽으십시오.
composer.json
파일의 require-dev
섹션에 다음 줄을 추가하세요. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
PHPCompatibility가 사용하는 유일한 외부 PHP CodeSniffer 표준인 경우 composer.json
파일에 다음을 추가하여 필요한 명령을 자동으로 실행할 수 있습니다.
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}
또는 하나 이상의 외부 PHP CodeSniffer 표준을 사용하는 경우 강력히 권장됩니다 . 다음 Composer 플러그인 중 하나를 사용하여 이를 처리할 수 있습니다.
composer.json
파일의 require-dev
섹션에 원하는 Composer 플러그인을 추가하기만 하면 됩니다.
사용자 정의 규칙 세트를 사용하는 경우 마지막 대안으로 사용자 정의 규칙 세트에 다음 코드 조각을 추가하여 PHP CodeSniffer에 PHPCompatibility 표준에 대한 경로를 알릴 수 있습니다.
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
실행하여 PHPCompatibility 코딩 표준인 PHP CodeSniffer와 선택적으로 Composer 플러그인을 모두 설치하세요../vendor/bin/phpcs -i
실행하여 PHPCompatibility 표준이 올바르게 등록되었는지 확인하세요. PHPCompatibility는 사용 가능한 표준 중 하나로 나열되어야 합니다../vendor/bin/phpcs -p . --standard=PHPCompatibility
원하는 방법으로 PHP CodeSniffer를 설치하세요.
PHP CodeSniffer는 작업 흐름에 맞는 다양한 설치 방법(Composer, PEAR, Phar 파일, 압축/타르된 릴리스 아카이브 또는 Git을 사용하여 저장소 체크아웃)을 제공합니다.
전문가 팁: 시스템 $PATH
환경 변수에 PHPCS 경로를 등록하면 파일 시스템 어디에서나 phpcs
명령을 사용할 수 있습니다.
최신 PHPCompatibility 릴리스를 다운로드하고 임의의 디렉터리에 압축을 풀거나 압축을 풉니다.
git을 사용하여 저장소를 복제하여 정기적으로 설치를 쉽게 업데이트할 수도 있습니다.
명령줄에서 아래 명령을 사용하여 PHP CodeSniffer 구성에 PHPCompatibility 저장소 복사본을 배치한 디렉터리의 경로를 추가합니다.
phpcs --config-set installed_paths /path/to/PHPCompatibility
즉 /my/custom/standards/PHPCompatibility
디렉토리에 PHPCompatibility
저장소를 배치한 경우 해당 디렉토리를 PHP CodeSniffer installed_paths
구성 변수에 추가해야 합니다.
경고 :installed_paths
명령은 이전에 설정된 installed_paths
덮어씁니다. 이전에 다른 외부 표준에 대해 installed_paths
설정한 경우 먼저 phpcs --config-show
실행한 다음 필요한 모든 경로를 쉼표로 구분하여 installed_paths
명령을 실행하십시오. 예:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
전문가 팁: 또는 사용자 정의 규칙 세트를 사용하는 경우 사용자 정의 규칙 세트에 다음 코드 조각을 추가하여 PHP CodeSniffer에 PHPCompatibility 표준에 대한 경로를 알릴 수 있습니다.
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
명령줄에서 phpcs -i
실행하여 PHPCompatibility 표준이 올바르게 등록되었는지 확인하세요. PHPCompatibility는 사용 가능한 표준 중 하나로 나열되어야 합니다.
이제 다음 명령을 사용하여 코드를 검사할 수 있습니다.
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
지정해야 합니다. 그러면 더 이상 사용되지 않거나 제거된 PHP 기능을 검사할 수 있을 뿐만 아니라 새로운 PHP 기능을 사용하는 코드를 감지할 수 있습니다.--runtime-set testVersion 5.5
추가하면 하나의 특정 PHP 버전에 대해서만 검사를 실행할 수 있습니다.--runtime-set testVersion 5.3-5.5
로 보고됩니다.--runtime-set testVersion 7.0-
사용하여 PHP 7.0 이상에 대한 모든 검사를 실행합니다.--report-full=path/to/report-file
추가하세요. 자세한 내용 및 기타 보고 옵션을 보려면 PHP CodeSniffer 위키를 확인하세요.2018년 중반부터 제한된 프레임워크/CMS 관련 규칙 세트 세트를 사용할 수 있습니다. 이러한 규칙 세트는 자체 저장소에서 호스팅됩니다.
PHPCompatibilityJoomla
Joomla GitHub | 포장 전문가PHPCompatibilityWP
GitHub | 포장 전문가2018년 가을부터 사용 가능한 PHP 폴리필 특정 규칙 세트도 많이 있습니다.
PHPCompatibilityPasswordCompat
GitHub | Packagist: @ircmaxell의 password_compat
폴리필 라이브러리를 설명합니다.PHPCompatibilityParagonie
GitHub | Packagist: Paragonie random_compat
및 sodium_compat
폴리필 라이브러리를 각각 설명하는 두 개의 규칙 세트가 포함되어 있습니다.PHPCompatibilitySymfony
GitHub | Packagist: Symfony 프로젝트에서 제공하는 다양한 PHP 폴리필 라이브러리를 설명하는 여러 규칙 세트가 포함되어 있습니다. 사용 가능한 규칙 세트에 대한 자세한 내용은 PHPCompatibilitySymfony 저장소의 README를 확인하세요. 언제든지 모든 PHPCompatibility 규칙 세트를 사용할 수 있는지 확인하려면 PHPCompatibilityAll
패키지 GitHub | 포장업자.
중요: Framework/CMS/Polyfill 특정 규칙 세트는 프로젝트의 최소 PHP 버전을 설정하지 않으므로 가장 정확한 결과를 얻으려면 testVersion
을 통과해야 합니다.
다른 PHP CodeSniffer 표준과 마찬가지로 사용자 정의 PHP CodeSniffer 규칙 세트에 PHPCompatibility를 추가할 수 있습니다.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset >
규칙 세트 내에서 testVersion
설정할 수도 있습니다.
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
물론 PHPCS 주석이 달린 규칙 세트 위키 페이지에 설명된 대로 선택 스니프의 메시지 유형이나 심각도 변경과 같은 기타 고급 옵션도 지원됩니다.
testVersion
과 명령줄 비교 PHPCS 3.2.0 이하에서는 규칙 세트에 testVersion
설정하면 더 이상 명령줄에서 이를 무시할 수 없습니다. PHPCS 3.3.0부터 명령줄을 통해 설정된 testVersion
규칙 세트의 testVersion
보다 우선합니다.
예를 들어 프로젝트가 PHP 5.5-
를 준수해야 하지만 부트스트랩 파일이 PHP 5.2-
와 호환되어야 하는 경우 이를 통해 더 많은 유연성을 얻을 수 있습니다.
현재 규칙 세트를 통해 설정할 수 있는 속성을 가진 두 개의 스니프가 있습니다. 앞으로 더 많은 사용자 정의 속성을 사용할 수 있게 될 것입니다.
PHPCompatibility.Extensions.RemovedExtensions
스니프는 이러한 확장에 사용된 함수 접두사를 기반으로 제거된 확장을 확인합니다. 이는 동일한 함수 접두사를 사용하는 사용자 영역 함수와 충돌할 수 있습니다.
userland 함수를 화이트리스트에 추가하려면 쉼표로 구분된 함수 이름 목록을 sniff에 전달할 수 있습니다.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule >
PHPCompatibility.Interfaces.RemovedSerializable
스니프는 가장 신뢰할 수 있는 결과를 제공하기 위해 Serializable
인터페이스를 확장하는 모든 인터페이스에 대해 알아야 합니다. 스니프는 스니프에 알려지지 않은 Serializable
인터페이스를 확장하는 인터페이스를 발견하면 경고하고 해당 인터페이스 이름을 속성에 추가하도록 권장합니다.
직렬화 가능 인터페이스를 제공하는 추가 인터페이스에 대해 스니프에 알리려면 아래 줄을 따라 사용자 정의 규칙 세트에 스니펫을 추가하세요.
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
PHPCompatibility를 사용하거나 이를 기반으로 확장하는 공개 프로젝트가 수백 개 있습니다. 여러분이 알고 있거나 살펴볼 수 있는 몇 가지의 짧은 목록은 다음과 같습니다.
기여를 매우 환영합니다. 시작하려면 CONTRIBUTING 문서를 읽어보세요.
이 코드는 GNU LGPL(Lesser General Public License)에 따라 공개됩니다. 자세한 내용은 http://www.gnu.org/copyleft/lesser.html을 참조하세요.