ただメモができるだけのブラウザアプリ「TextArea」はこちらw

PHPバージョンアップの際はPHPComptibilityで静的解析をしてエラーと警告を見つけよう

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で静的解析した方が安心かと思います!!

スポンサーリンク
PHP
フォローする
さゆフィクション