【PHP8.x】E_STRICT定数の使い方
E_STRICT定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
E_STRICT定数は、PHPプログラムが厳密なコーディング標準に適合しているかをチェックし、適合しない箇所に対して警告を発するためのエラーレベル定数です。この定数は、コードの品質を向上させ、潜在的なバグや将来のPHPバージョンでの互換性の問題を未然に防ぐことを目的としています。具体的には、非推奨の機能の使用、推奨されないコーディングスタイル、または将来的に動作が変更される可能性のある書き方などに対して警告を生成します。PHP 5で導入され、静的コンテキストからの非静的メソッド呼び出しのような厳密な規約違反を指摘する役割を担っていました。
PHP 7以降のバージョンでは、E_STRICTが検出していた警告の多くが、E_DEPRECATEDやE_NOTICEといった他のエラーレベルに吸収され、E_ALLにデフォルトで含まれるようになりました。そのため、現在ではerror_reporting(E_ALL)と設定するだけで、E_STRICTが提供する多くの厳密なチェックが網羅されることが一般的です。しかし、E_STRICT定数自体はPHPの内部定数として引き続き存在しており、error_reporting()関数で明示的に設定することで、より厳密なチェックを意図的に行うことも可能です。
システムエンジニアを目指す方々にとって、E_STRICTによって示される警告は、プログラムの動作を直ちに停止させるものではありませんが、コードの改善点や将来的なメンテナンス性を高めるための重要な手がかりとなります。これらの警告に注意を払い、コードをより高品質なものに改善していく姿勢は、安定したシステム開発において非常に重要です。
構文(syntax)
1error_reporting(E_ALL | E_STRICT);
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP 8におけるE_STRICT定数の解説
1<?php 2 3/** 4 * PHPにおけるE_STRICT定数の使用例とPHP 8での位置付けを初心者向けに解説します。 5 * 6 * E_STRICTは、過去にPHPの厳密なコーディング標準チェックを有効にするためのエラーレベルでしたが、 7 * PHP 8.0以降ではE_ALLに統合され、明示的に指定しても独立した効果はありません。 8 * この関数は、E_STRICTがどのように使われていたか、そしてPHP 8での現状を説明します。 9 */ 10function demonstrateEStrictInPhp8(): void 11{ 12 echo "--- E_STRICT 定数について (PHP 8の文脈) ---\n\n"; 13 14 // E_STRICT定数の値を確認 15 // E_STRICTは内部的な定数であり、整数値を持っています。 16 // PHP 8ではこの定数自体はまだ存在しますが、その振る舞いは変わっています。 17 echo "E_STRICT の定数値: " . E_STRICT . "\n\n"; 18 19 echo "過去のPHPバージョン (例: PHP 5.x から 7.x) では、\n"; 20 echo "`error_reporting(E_ALL | E_STRICT);` のように指定することで、\n"; 21 echo "より厳密なコーディング標準に違反する警告を有効にしていました。\n\n"; 22 23 echo "しかし、PHP 8.0 以降では、E_STRICT は E_ALL に統合されました。\n"; 24 echo "これは、E_STRICT を明示的に指定しても、E_ALL を指定した場合と\n"; 25 echo "実質的に同じエラーレポートレベルとなることを意味します。\n\n"; 26 27 // PHP 8で推奨されるエラーレポートレベルの設定 28 echo "現在のエラーレポートレベルを E_ALL に設定します。\n"; 29 error_reporting(E_ALL); 30 echo "現在のエラーレポートレベル: " . error_reporting() . " (E_ALL に設定)\n\n"; 31 32 // E_STRICT を含んだ形で設定してみる (PHP 8ではE_ALLに統合されているため実質的な違いはありません) 33 echo "E_ALL | E_STRICT でエラーレポートレベルを設定してみます。\n"; 34 error_reporting(E_ALL | E_STRICT); 35 echo "E_ALL | E_STRICT に設定後のエラーレポートレベル: " . error_reporting() . "\n"; 36 echo "この値が E_ALL を単独で指定した場合と同じか、E_STRICT の値が E_ALL に含まれていることが分かります。\n\n"; 37 38 echo "結論として、PHP 8では `error_reporting(E_ALL);` を使用するのが一般的です。\n"; 39 echo "E_STRICT を明示的に含める必要は通常ありません。\n"; 40 echo "さらに、E_STRICT 定数自体は将来のPHPバージョン (PHP 9.0) で削除される予定です。\n"; 41} 42 43// 関数を実行してE_STRICTに関する情報を出力します 44demonstrateEStrictInPhp8();
E_STRICTは、PHPの内部定数の一つで、PHPのエラーレポートレベルを制御するために使用されていました。過去のPHPバージョンでは、この定数をerror_reporting()関数と組み合わせて指定することで、より厳密なコーディング標準に違反する警告を有効にしていました。
しかし、PHP 8.0以降ではE_STRICTの役割が変更され、E_ALL(すべてのエラーを報告するレベル)に統合されました。このため、PHP 8でE_STRICTを明示的に指定しても、E_ALLのみを指定した場合と実質的に同じエラーレポートレベルとなり、独立した効果はありません。
サンプルコードでは、まずE_STRICT定数の値を確認し、その上でerror_reporting()関数を使って現在のエラーレポートレベルをE_ALLに設定しています。その後、E_ALLとE_STRICTを組み合わせて設定した場合でも、結果がE_ALL単独の場合と同じになることを示し、PHP 8におけるE_STRICTの振る舞いを解説しています。
E_STRICTは定数であるため、引数を取りません。また、特定の整数値を持ちますが、関数のような直接的な戻り値はありません。PHP 8でのエラーレポートレベルの設定には通常error_reporting(E_ALL);を使用し、E_STRICTはPHP 9.0で削除される予定です。
PHP 8以降では、E_STRICT定数をerror_reporting()関数で指定しても、E_ALLに統合されているため、独立した効果はありません。過去のPHPバージョンからのコードを流用する際にE_STRICTの指定を見かけることがありますが、PHP 8では厳密なエラーレポートを有効にするには、単にerror_reporting(E_ALL);と設定することが推奨されます。これはE_ALLにE_STRICTが提供していた厳格なチェックも含まれるためです。また、E_STRICT定数自体は、将来のPHPバージョン(PHP 9.0)で削除される予定ですので、新しいプロジェクトでこの定数を明示的に使用することは避けてください。古い情報に惑わされず、現在のPHPバージョンに合わせた設定を適用することが安全で正しい利用方法となります。
PHP E_STRICT の現状と推奨設定
1<?php 2 3/** 4 * E_STRICT 定数に関するPHPの振る舞いを示すサンプルコードです。 5 * 6 * E_STRICTは、PHP 7.0で非推奨(deprecated)となり、PHP 8.0で完全に削除されたエラーレベル定数です。 7 * かつては厳格な標準違反に対する警告を報告するために使用されました。 8 * 9 * システムエンジニアを目指す初心者向けに、現在のPHPバージョンでのE_STRICTの状況と 10 * 推奨されるエラー報告設定を説明します。 11 */ 12 13function demonstrateEStrictStatus(): void 14{ 15 echo "--- E_STRICT 定数のステータス確認 ---\n"; 16 17 // PHP 8.0以降では E_STRICT 定数は削除されているため、定数の存在を確認します。 18 if (defined('E_STRICT')) { 19 echo "E_STRICT 定数は存在します。値: " . E_STRICT . "\n"; 20 echo "注意: このメッセージはPHP 7.0以前の環境でのみ表示されます。\n"; 21 echo " PHP 7.0以前では、error_reporting(E_ALL | E_STRICT) のように使用されました。\n"; 22 } else { 23 echo "E_STRICT 定数は、現在のPHPバージョン (PHP 8.0以降) では削除されており、存在しません。\n"; 24 echo " PHP 7.0で非推奨 (deprecated) となり、PHP 8.0で完全に削除されました。\n"; 25 echo " これは、E_STRICT が報告していた警告が、E_ALL に統合されたためです。\n"; 26 } 27 28 echo "\n--- 現在のエラー報告設定 (PHP 8.0以降の推奨) ---\n"; 29 30 // PHP 8.0以降で推奨されるエラー報告レベルを設定する例です。 31 // E_ALL はすべてのエラー、警告、通知、および厳格な標準違反 (かつてE_STRICTが扱っていたものを含む) を報告します。 32 error_reporting(E_ALL); 33 // 開発環境では、エラーを画面に表示する設定を有効にすることが推奨されます。 34 ini_set('display_errors', '1'); 35 36 echo "現在の推奨されるエラー報告設定: error_reporting(E_ALL);\n"; 37 echo "現在の error_reporting() の値: " . error_reporting() . "\n"; 38 echo " この設定により、以前 E_STRICT が報告していたような厳格な標準違反も適切に検出されます。\n"; 39 echo " 本番環境では 'display_errors' を '0' に設定し、エラーをログに記録することを推奨します。\n"; 40} 41 42// 関数を実行します。 43demonstrateEStrictStatus(); 44
E_STRICTは、かつてPHPで厳格な標準違反に対する警告を報告するために使われたエラーレベル定数です。しかし、PHP 7.0で非推奨となり、PHP 8.0で完全に削除されました。これは、E_STRICTが扱っていた警告が、より包括的なE_ALLエラーレベル定数に統合されたためです。サンプルコードでは、現在のPHP 8.0以降の環境ではE_STRICTが存在しないことを示し、過去の使用方法にも触れています。そして、PHP 8.0以降で推奨されるエラー報告設定として、すべてのエラー、警告、通知を報告するerror_reporting(E_ALL)と、開発環境での画面表示を有効にするini_set('display_errors', '1')を紹介しています。この設定により、以前E_STRICTが報告していた厳格な標準違反もE_ALLによって適切に検出されます。E_STRICTは定数であるため引数はなく、特定の処理の結果として戻り値も持ちません。
E_STRICT定数はPHP 8.0で削除されており、現在のPHPバージョンでこの定数を使用するとエラーとなります。古いPHPバージョンのコードを参照する際は、E_STRICTの使用箇所に特に注意してください。E_STRICTが報告していた厳格な警告は、現在E_ALLに含まれています。したがって、PHP 8.0以降ではerror_reporting(E_ALL)を設定することが、すべてのエラーや警告を適切に検出するために推奨されます。開発環境ではdisplay_errorsを有効にしてエラーを画面に表示し、問題の早期発見に役立ててください。しかし、本番環境ではセキュリティとユーザー体験の観点からdisplay_errorsを無効にし、エラーはログに記録する設定にすることが重要です。