これは、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 バージョンと最新の PHP_CodeSniffer バージョンを組み合わせてスニフを実行することをお勧めします。
バージョン 8.0.0 以降、PHPCompatibility 標準は PHP CodeSniffer 3.x でも使用できます。バージョン 9.0.0 以降、PHP CodeSniffer 1.5.x および 2.3.0 より前の 2.x バージョンのサポートは終了しました。バージョン 10.0.0 以降、PHP < 5.4 および PHP CodeSniffer < 3.10.0 のサポートは削除されました。
貴重な貢献をしてくださったすべての寄稿者に感謝します。
PHP 7.0 スニッフをサポートしてくれた WP Engine に感謝します。
この図書館は再編成されました。すべてのスニッフはカテゴリに分類され、かなりの数のスニッフの名前が変更されました。
カスタム ルールセットでexclude
ディレクティブを使用せずに完全なPHPCompatibility
標準を使用し、PHP_CodeSniffer 3.2.0 で導入された新しいスタイルの PHP_CodeSniffer アノテーションを (まだ) 使用していない場合、目立った影響はなく、すべてが以前と同様に動作するはずです。
ただし、カスタム ルールセットで PHPCompatibility スニフのexclude
ディレクティブを使用する場合、または新しいスタイルの PHP_CodeSniffer インライン アノテーションを使用する場合は、アップグレード時にこれらを更新する必要があります。これは 1 回限りの変更です。変更ログには、すべてのスニフの名前変更に関する詳細情報が含まれています。
アップグレードする前に、バージョン 9.0.0 の変更ログをよくお読みください。
composer.json
ファイルのrequire-dev
セクションに追加します。 "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
使用する外部 PHP CodeSniffer 標準が PHPCompatibilityだけである場合は、次のコードを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 プラグインを、 composer.json
ファイルのrequire-dev
セクションに追加するだけです。
カスタム ルールセットを使用する場合の最後の代替手段として、次のスニペットをカスタム ルールセットに追加することで、PHP CodeSniffer に PHPCompatibility 標準へのパスを伝えることができます。
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
を実行して、PHP Compatibility コーディング標準である PHP CodeSniffer と、オプションで Composer プラグインの両方をインストールします。./vendor/bin/phpcs -i
実行して、PHPCompatibility 標準が正しく登録されていることを確認します。 PHPCompatibility は、利用可能な標準の 1 つとしてリストされる必要があります。./vendor/bin/phpcs -p . --standard=PHPCompatibility
好みの方法で PHP CodeSniffer をインストールします。
PHP CodeSniffer は、ワークフローに合わせてさまざまなインストール方法を提供します。Composer、PEAR、Phar ファイル、zip/tar 形式のリリース アーカイブ、Git を使用したリポジトリのチェックアウトなどです。
プロのヒント:システムの$PATH
環境変数に PHPCS へのパスを登録して、ファイル システムのどこからでもphpcs
コマンドを使用できるようにします。
最新の PHPCompatibility リリースをダウンロードし、任意のディレクトリに解凍/解凍します。
git を使用してリポジトリのクローンを作成し、インストールを定期的に簡単に更新することもできます。
コマンドラインから以下のコマンドを使用して、PHPCompatibility リポジトリのコピーを配置したディレクトリへのパスを PHP CodeSniffer 構成に追加します。
phpcs --config-set installed_paths /path/to/PHPCompatibility
つまり、 PHPCompatibility
リポジトリを/my/custom/standards/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 は、利用可能な標準の 1 つとしてリストされる必要があります。
これで、次のコマンドを使用してコードを検査できるようになります。
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
。testVersion
を指定する必要があります。これにより、非推奨/削除された PHP 機能のチェックと、新しい PHP 機能を使用したコードの検出が有効になります。--runtime-set testVersion 5.5
コマンド ライン コマンドに追加することで、特定の 1 つの PHP バージョンのみのチェックを実行できます。--runtime-set testVersion 5.3-5.5
。--runtime-set testVersion 7.0-
使用して、PHP 7.0 以降のすべてのチェックを実行します。--report-full=path/to/report-file
を追加します。詳細およびその他のレポート オプションについては、PHP CodeSniffer wiki を確認してください。2018 年半ばの時点で、フレームワーク/CMS 固有のルールセットの限られたセットが利用可能です。これらのルールセットは、独自のリポジトリでホストされます。
PHPCompatibilityJoomla
Joomla GitHub |梱包担当者PHPCompatibilityWP
GitHub |梱包担当者2018 年の秋以降、多数の PHP ポリフィル固有のルールセットも利用可能になりました。
PHPCompatibilityPasswordCompat
GitHub | Packagist: @ircmaxell のpassword_compat
Polyfill ライブラリのアカウントです。PHPCompatibilityParagonie
GitHub | Packagist: Paragonie のrandom_compat
およびsodium_compat
ポリフィル ライブラリをそれぞれ説明する 2 つのルールセットが含まれています。PHPCompatibilitySymfony
GitHub | Packagist: Symfony プロジェクトによって提供されるさまざまな PHP ポリフィル ライブラリを考慮した多数のルールセットが含まれています。利用可能なルールセットの詳細については、PHPCompatibilitySymfony リポジトリの README を確認してください。すべての PHPCompatibility ルールセットをいつでも利用できるようにしたい場合は、 PHPCompatibilityAll
パッケージを使用できます。パッケージニスト。
重要:フレームワーク/CMS/Polyfill 固有のルールセットはプロジェクトの最小 PHP バージョンを設定しないため、最も正確な結果を得るにはtestVersion
に合格する必要があります。
他の PHP CodeSniffer 標準と同様に、PHPCompatibility をカスタム PHP CodeSniffer ルールセットに追加できます。
<? 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 注釈付きルールセット Wiki ページで説明されているように、メッセージ タイプや選択されたスニフの重大度の変更など、他の高度なオプションももちろんサポートされています。
testVersion
PHPCS 3.2.0 以前では、ルールセットにtestVersion
設定すると、コマンドラインからそれを無効にすることはできなくなりました。 PHPCS 3.3.0 以降、コマンドライン経由で設定されたtestVersion
、ルールセット内のtestVersion
無効にします。
これにより、たとえば、プロジェクトが PHP 5.5-
に準拠する必要があるが、ブートストラップ ファイルは PHP 5.2-
と互換性がある必要がある場合に、より柔軟な対応が可能になります。
現時点では、ルールセットを介して設定できるプロパティを持つスニッフが 2 つあります。将来的にはさらに多くのカスタム プロパティが利用可能になる可能性があります。
PHPCompatibility.Extensions.RemovedExtensions
スニフは、これらの拡張機能に使用されている関数プレフィックスに基づいて、削除された拡張機能をチェックします。これは、同じ関数プレフィックスを使用するユーザーランド関数と衝突する可能性があります。
ユーザーランド関数をホワイトリストに登録するには、カンマ区切りの関数名のリストをスニフに渡すことができます。
<!-- 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
インターフェイスを拡張するインターフェイスを検出すると警告を発し、インターフェイス名をプロパティに追加することを推奨します。
Serializable インターフェイスを提供する追加インターフェイスについてスニッフに通知するには、以下の行に沿ったスニフをカスタム ルールセットに追加します。
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
PHPCompatibility を使用したり、その上で拡張したりするパブリック プロジェクトが何百もあります。あなたが知っている、または参考にできるかもしれないものの短いリスト:
貢献は大歓迎です。始めるには、CONTRIBUTING ドキュメントをお読みください。
このコードは、GNU Lesser General Public License (LGPL) に基づいてリリースされています。詳細については、http://www.gnu.org/copyleft/lesser.html を参照してください。