PHPバージョンアップの際はPHPComptibilityで静的解析をしてエラーと警告を見つけられるそうです。全部見つけられるわけではないと思いますが、PHPComptibilityで静的解析した方が安心かと思います。
ということでPHPComptibilityを試しにやってみます。
ローカルのPHP実行環境で、PHPComptibilityを動かす感じになりますが、ローカル環境がない場合は、以下のURLをご参照ください。
PHPプログラムのコンテナローカル開発環境を最短で立ち上げる簡単な方法(apache×php×mysql)
PHPプログラムのコンテナローカル開発環境を簡単に最短で立ち上げます! 以下を使います! apache htaccess有効な状態 ドキュメントルートの設定は.htaccessで行います! php バージョン8.3 mysql バージョン8...
PHPComptibilityで静的解析してみる
PHPComptibilityのインストール
以下のコマンドでインストールできます。
composer require --dev phpcompatibility/php-compatibility dev-develop
実際に静的解析してみる!!
以下の警告・エラーが出ない想定のプログラムに対して、静的解析してみます!
<?php
print"aaaa";
静的解析実行コマンドは以下です。「/index.php」で解析対象のファイルを指定します。
上記の解析対象のプログラムをindex.phpで作成したので、今回は「/index.php」を指定しています。
現在のディレクトリ配下全てを解析したい場合は「.」を指定することで、ディレクトリ配下全ての解析ができます。
./vendor/bin/phpcs -p ./index.php --standard=PHPCompatibility --runtime-set testVersion 8.3 -d memory_limit=1024M --report-full=8.3_report.txt
解析結果は「8.3_report.txt
」に吐き出すようにしています。
上記実行結果、エラー・警告はないため、「8.3_report.txt
」はカラでした。
次に警告が出るPHPファイルを上記と同様、index.phpというファイルに作成して解析してみます。
<?php
print"aaaa";
# 8.3非推奨
class foo {
function name()
{
echo "My name is " , get_class() , "\n";
}
}
以下のコマンドで再度、静的解析してみます。
./vendor/bin/phpcs -p ./index.php --standard=PHPCompatibility --runtime-set testVersion 8.3 -d memory_limit=1024M --report-full=8.3_report.txt
解析結果は以下です。
想定通り、1つ警告が出ました。
FILE: /var/www/html/index.php
--------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------
8 | WARNING | Calling get_class() without the $object argument is deprecated
| | since PHP 8.3.
--------------------------------------------------------------------------------
今度はさらにエラーが出るPHPソースをindex.phpに追加して、解析してみます。
解析対象のソースは以下です。
<?php
print"aaaa";
# 8.3非推奨
class foo {
function name()
{
echo "My name is " , get_class() , "\n";
}
}
# 8.0削除
implode([1,2,3], ',');
以下のコマンドで解析します。
./vendor/bin/phpcs -p ./index.php --standard=PHPCompatibility --runtime-set testVersion 8.3 -d memory_limit=1024M --report-full=8.3_report.txt
解析結果は以下の通りになりました。
FILE: /var/www/html/index.php
--------------------------------------------------------------------------------
FOUND 1 ERROR AND 1 WARNING AFFECTING 2 LINES
--------------------------------------------------------------------------------
8 | WARNING | Calling get_class() without the $object argument is deprecated
| | since PHP 8.3.
13 | ERROR | Passing the $glue and $pieces parameters in reverse order to
| | implode has been deprecated since PHP 7.4 and is removed since
| | PHP 8.0; $glue should be the first parameter and $pieces the
| | second
--------------------------------------------------------------------------------
想定通り、1つエラーがつかされましたが出ました。
まとめ
簡単にPHPComptibilityで静的解析ができました。
PHPバージョンアップの際はPHPComptibilityで静的解析した方が安心かと思います!!