PHPバージョンの互換性について知ることがなぜ重要なのか、PHPバージョンのアップデートに関する情報はどこで見つけることができるのか、そしてプラグインやテーマが最新のPHPバージョンをサポートしているかどうかを2つの方法でテストする方法。
なぜPHPのバージョンの互換性をテストする必要があるのですか?
WordPressはPHP言語で書かれているため、ウェブホストがサポートしているバージョンのPHPでスムーズに動作する必要があります。WordPressは最低限必要なPHPのバージョンを推奨していますが、古いバージョンのPHPは徐々に更新されなくなったり、セキュリティパッチが提供されなくなったりします。
例えば、現在WordPressで推奨されているPHPの最小バージョンは7.4だが、このバージョンは2022年11月28日に更新が停止されている。
WordPressのコアコードはPHP 8.0とPHP 8.1で動作し、PHP 8.2とPHP 8.3のバージョンもサポートしています。しかし、すべてのプラグインがこれらの新しいバージョンのPHPで正しく動作することが保証されているわけではありません。
そのため、もしあなたがプラグイン開発者であれば、異なるPHPバージョンとのプラグインの互換性を定期的にチェックすることが非常に重要です。
PHPのバージョン変更に関する情報の入手先
PHPのバージョンがいつどのように変更されたかを知るには、PHPの公式サイト https://www.php.net/ を参照するのが一番です。
ある「対応バージョンのページでは、現在サポートされているバージョン、サポートのレベル、サポートが終了したバージョンに関する情報をご覧いただけます。
この記事を書いている時点で、PHP 7.x のリリースはすべて終了しており、PHP 8.0 はセキュリティ修正のみをサポートし、PHP 8.1 だけでなく PHP 8.2 や 8.3 も積極的にサポートしています。PHP8.0は、PHP8.3がリリースされる2023年11月までセキュリティフィックスのみをサポートし、その後PHP8.0はサポート終了となることに注意してください。
PHPドキュメントの付録セクションに、古いバージョンのPHPからの移行ガイドがあり、新旧バージョン間の最も重要な変更点が記載されています。例えばPHP 7.4.x から PHP 8.0.x への移行このガイドでは、PHP 7.4 と PHP 8.0 の間で最も重要な変更点を挙げています。
サンプルプラグイン
<?php
/**
* Plugin Name: WP Learn Compatibility
* Description: Learn to test a plugin for PHP Version Compatibility
* Version: 1.0.1
*
* @package wp-learn-compatibility
*/
/**
* Posts fetcher class
*/
class Post_Fetcher {
/**
* Array posts
*
* @var array
*/
protected $posts;
/**
* Fetch the WordPress posts
*/
public function post_fetcher() {
$this->posts = get_posts();
}
/**
* 投稿を取得し、フォーマットされたHTMLを返す。
* @return string
* 文字列を返す
*/
public function fetch_posts() { 以下のようにします。
$post_html = '<div class="post">';
foreach ( $this->posts as $post ) { ( $this->posts as $post )
if ( property_exists( $post, 'post_title' ) ) { .
$post_html .= sprintf(
'<h4><a href="/ja/%s/">%s</a></h4>',
get_permalink( $post->ID )、
$post->post_title
);
}
}
$post_html .= '</div>';
return $post_html.
}
}
add_shortcode( 'wp_learn_php_compatibility', 'wp_learn_php_compatibility_shortcode_render' );
/**
* wp_learn_php_compatibility ショートコードのコールバック関数
ショートコード shortcode_render' ); /** * @return string
* 文字列を返します。
*/
関数 wp_learn_php_compatibility_shortcode_render() {
$post_fetcher = new post_fetcher();
$post_html = $post_fetcher->fetch_posts();
return $post_html;
}
このチュートリアルでは、サンプルのプラグインについて説明します。このプラグインは特別なショートコードを作成し、ページで使用すると、各投稿のタイトルを含む投稿のリストを表示します。というショートコードを作成します。ポストフェッチャー
クラスはこのポスト情報の取得を担当する。
このショートコードをPHPバージョン7.4のサーバーでテストしてみると、期待通りに投稿のリストを表示し、正しく動作していることがわかります。
PHPバージョンの互換性をテストする方法
PHP のバージョンの互換性をチェックするには、いくつかの異なるテスト方法があり、 異なるバージョンの PHP を使ったり、特別なツールを使ったりします。このチュートリアルでは、2 つのテスト方法を紹介し、それぞれの利点と欠点を探ります。
手動互換性テスト
手動テストの方法では、テストしたい PHP のバージョンを WordPress 環境に設定し、その環境でプラグインをテストする必要があります。
このような環境をセットアップする方法はいくつかありますが、最も一般的な方法は、Mamp、Laragon、LocalWP、DevKinstaなど、PHPのバージョンを簡単に切り替えることができるローカル開発ツールを使用することです。
このチュートリアルでは、例えばテスト用に PHP バージョン 8.1 を選択します。
WordPressが使用しているPHPのバージョンを素早く確認するには、WordPressのインストール・ディレクトリにinfo.phpというファイルを作成し、その中に特定のコードを記述します。
<?php
phpinfo();
その後、ブラウザでinfo.phpファイルに移動すると、PHPのバージョンが表示されるはずです。
テスト環境を設定したら、WordPressのデバッグを有効にする必要があります。
これを行うにはwp-config.php
ファイルを更新し、定数WP_DEBUG
に設定する。真の
define( 'WP_DEBUG', true );
さらにwp_debug_display
定数を追加し、それをfalseに設定する。WP_DEBUG_LOG
定数にtrueをセットして、エラーをディレクトリデバッグログ
文書内wpコンテンツ
.
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );
また、次のこともできる。WP_DEBUG_LOG
ファイルパスを指定して、カスタムロケーションに定数を設定する。例
define( 'WP_DEBUG_LOG', '/home/ubuntu/wp-local-env/sites/learnpress/logs/debug.' . date( 'Y-m-d' ) . '.log' );
その後、ページを更新してプラグインをテストしてください。ショートコードの機能が壊れていることに注意してください。
debug.logを見ると、次のようなエラーが表示されている:
[24-Nov-2023 12:59:49 UTC] PHP Warning: foreach() argument must be of type array|object, null given in /home/ubuntu/wp-local-env/sites/learnpress./wp-content/plugins/wp-learn-php-compatibility/wp-learn-php-compatibility.php on line 36
プラグイン・ファイルの36行目に行くと、次のようなコードがある。$his->投稿
属性は、何らかの理由でNULLになっています。PHP 7.4.x から PHP 8.0.x への移行ガイド
後方互換性のない変更」セクションには、以下の変更点が表示されます:
クラスと同じ名前のメソッドはコンストラクタとして解釈されなくなりました。 代わりに __construct() メソッドを使用する必要があります。
この場合、コンストラクタのメソッドを更新する必要がある。
修正後、ページを更新すると、プラグインが期待通りに動作していることが確認できます。
手動でのテストも有効ですが、それは退屈な作業です。幸いなことに、PHPUnit というツールを使えばほとんどのテストを自動化することができます。これによって、バグやPHPとの互換性の問題からコードを守り続けることができるようになります。
PHPCompatibilityWPでコードをスキャンする
PHPの互換性をテストするためのツールもいくつかあります。PHPC互換性ツール。PHP_CodeSniffer道具のルール。
PHP_CodeSnifferはコマンドラインツールで、エラーや警告のコードをスキャンします。一方、PHPCompatibilityツールはPHP_CodeSnifferと一緒に使用するルールセットで、PHPバージョンの互換性をスキャンします。
WordPressの開発者には、次のような新機能がある。PHPC互換性WPこれは、WordPress プロジェクト PHPCompatibility ルールセット専用のルールセットです。
PHPCompatibility/PHPCompatibilityWPの優れている点は、使用するために異なるバージョンのPHPを設定する必要がないことです。既存のバージョンのPHPで使用することができ、指定したPHPバージョンのルールとあなたのコードを照合します。
PHPCompatibilityWPをインストールして使用するには、PHPプロジェクトの依存関係管理ツールであるComposerをインストールする必要があります。
Composer を動作させるためには、PHP CLI バイナリを使用できるように、コンピューターに PHP をインストールしておく必要があります。PHP CLI バイナリを使用すると、ブラウザーだけでなくターミナルでも PHP スクリプトを実行できるようになります。
Composerのインストールは、このコースの範囲外ですが、以下のページで見つけることができます。作曲家ウェブサイトを使用する最善の方法を見つける。macOS/Linux歌で応えるウィンドウズオペレーティングシステムの説明。
PHPサイトの一覧は、PHPウェブサイトのPHPをシステムにインストールする方法については、"インストールと設定 "のセクションを参照してください。
PHP をインストールしたら、PHP CLI バイナリへのパスを コンピュータのオペレーティングシステムのパスに追加してください。
PHPがインストールされているかどうかは、ターミナルで以下のコマンドを実行することで確認できます:
php -v
同様に、Composerがインストールされているかどうかは、ターミナルで以下のコマンドを実行することで確認できる:
作曲家 -V
Composerをインストールしたら、pluginディレクトリで以下のコマンドを実行することで、Composerプロジェクトを初期化できる。すでにプラグインでComposerを使用している場合は、このステップは省略できる。
コンポーザー・イニット
これで、pluginsディレクトリに新しいComposerプロジェクトが初期化される。ほとんどの質問にはデフォルト値を受け入れることができますが、依存関係を対話的に定義するか(require)、開発依存関係を対話的に定義するか(require-dev)と聞かれたら、「No」と答えてください。と聞かれたら、「いいえ」と答えてください。PSR-4の自動ロードマッピングをスキップすることもできます。
これが完了するとcomposer.json
これはComposerがプロジェクトの依存関係を管理するために使用するファイルだ。
次に、Composer プラグインをインストールし、PHP_CodeSniffer のインストールパスの設定を管理する必要があります。すでにこのプラグインがインストールされている場合は、無視してかまいません。
composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
次のコマンドを実行して、Composerインストーラ・プラグインとPHPCompatibilityWPツールをインストールできます:
composer require --dev dealerdirect/phpcodesniffer-composer-installer:"^1.0"
composer require --dev phpcompatibility/phpcompatibility-wp: "*"
これでcomposer.jsonファイルに必要な依存関係が設定され、インストールされる。
PHPC Compatibility と PHPC CompatibilityWP のバージョンに関する注意事項。
現在、PHPCompatibility の安定バージョンは9.3.5最近の嗅覚はリリース10.0.0の一部です。リリース. PHPCompatibilityWP の現在の安定バージョンは次のとおりです。2.1.4
PHPCompatibilityバージョン10.0がリリースされると、PHPCompatibilityWPバージョン3.0もリリースされ、これはPHPCompatibilityバージョン10.0に依存します。
PHPCompatibilityのバージョン10.0.0がリリースされるまでの間、PHPCompatibilityのdev-developブランチをインストールすることで、PHPCSを実行し、最先端のPHP 8スニッフィングを追加することができます。WordPress VIPドキュメント.
これを行うには、以下のコマンドを実行して、PHPCompatibilityのdev-developブランチのエイリアスを指定する:
composer config 最小安定性 dev
composer require --dev phpcompatibility/phpcompatibility-wp:"^2.1"
composer require --dev phpcompatibility/php-compatibility: "dev-develop as 9.99.99"
これらのコマンドは開発する
PHPCompatibility ブランチは、PHPCompatibility が許可する範囲内のバージョン 9.x にエイリアスし、最新の安定版 2.1 をインストールするように PHPCompatibilityWP を設定します。
PHPCompatibility 10とPHPCompatibilityWP 3がリリースされれば、PHPCompatibilityWPのバージョン制約を"^3.0 "に更新できるはずですが、これはPHPCompatibilityのバージョン10に依存します。これはPHPCompatibilityのバージョン10に依存します。
これらすべてをインストールした後、プラグインファイルに対してPHPCompatibilityWPツールを実行することができます。
推奨される方法は、PHP の特定のベースバージョンに対して PHPCompatibilityWP を実行することです。テストバージョン
ランタイム変数はPHP 7.4以上で動作するように設定されています。7.4-
.
./vendor/bin/phpcs --runtime-set testVersion 7.4- -p wp-learn-php-compatibility.php --standard=PHPCompatibilityWP
このような出力が表示される:
w 1 / 1 (100%)
ファイル名: /Users/jonathanbossenger/wp-local-env/sites/learnpress/wp-content/plugins/wp-learn-php-compatibility/wp-learn-php-互換性.php
-----------------------------------------------------------------------------------------------------------------------------------------
1行に0個のエラーと1個の警告が見つかりました。
-----------------------------------------------------------------------------------------------------------------------------------------
15 | 警告|非推奨の PHP4 スタイルのクラス・コンストラクタの使用は、 PHP 7 以降ではサポートされていません。
-----------------------------------------------------------------------------------------------------------------------------------------
時間: 33ms; メモリ: 8MB
マニュアルの方法と同じエラーが報告されているが、今回はより具体的であることに注目してほしい。どの行でエラーが発生したのか、そしてそのエラーは何だったのかを正確に教えてくれる。
これでクラス・コンストラクタのエラーを修正できる。
ほら
PHPCompatibilityWPのようなツールを使う場合の注意点の一つは、すべての互換性エラーを検出できるわけではないということである。
例えば、PHP 7.4からPHP 8.0へのその他の変更点の1つは、オブジェクトarray_key_exists()
その代わりにproperty_exists()
同様の機能を使うべきである。
しかし、PHPCompatibilityWP ツールはarray_key_exists()
は配列かオブジェクトなので、それについて警告することはできない。
そこで、自動化された手動テストが役に立ちます。新しい PHP 環境でテストを実行すると、テストは失敗し、 問題が発生する可能性があります。ロギングを有効にすると、エラーがログファイルに記録されます。
最終的には、PHPCompatibility のようなツールと、これまで説明した自動テストや手動テストのプロセスを組み合わせることで、プラグインが現在および将来のバージョンの PHP と互換性があることを確認することができます。
お問い合わせ |
---|
記事が読めない?無料でお答えします!個人サイト、中小企業サイトのための無料ヘルプ! |
① 電話:020-2206-9892 |
② QQ咨询:1025174874 |
三 Eメール:info@361sale.com |
④ 勤務時間:月~金、9:30~18:30、祝日休み |