開発に推奨される error_reporting() 設定は何ですか?E_STRICTはどうでしょうか?
-
09-06-2019 - |
質問
通常、私が使用するのは E_ALL
コードを改善するために PHP がコードに関して何を言っているかを確認します。
エラー定数に気づきました E_STRICT
, を使用したことも聞いたこともありませんが、これは開発に使用するのに適した設定ですか?マニュアルには次のように書かれています。
実行時の通知。PHP がコードへの変更を提案するように設定すると、コードの最高の相互運用性と上位互換性が保証されます。
それで、私は最高のものを使用しているかどうか疑問に思っています error_reporting
と同じレベル E_ALL
それともそれと一緒ですか E_STRICT
最善を尽くす?それとも、まだ学んでいない他の組み合わせがあるのでしょうか?
解決
PHP 5 でカバーされる内容は、 E_STRICT
は対象外です E_ALL
, したがって、最大限の情報を取得するには、それらを組み合わせる必要があります。
error_reporting(E_ALL | E_STRICT);
PHP5.4では、 E_STRICT
に含まれます E_ALL
, したがって、次のように使用できます。 E_ALL
.
も使用できます
error_reporting(-1);
これは常に有効になります 全て エラー。これは意味的には次のようにより正確です。
error_reporting(~0);
他のヒント
php.ini で以下を使用します。
error_reporting = E_ALL | E_STRICT
また、インストールする必要があります Xデバッグ, 、まばゆいばかりの明るい色で間違いを強調表示し、役立つ詳細情報を印刷できます。
たとえそれが無害であっても、コード内にエラーや通知を決して入れないでください。
私の意見では、開発段階でエラー報告レベルを高く設定するほど良いと思います。
ライブ環境では、わずかに (ほんの少しだけ) 縮小したセットが必要ですが、ユーザーからは見えない場所にログとして記録したいとします (私はそれを好みます)。 syslog
).
http://php.net/error_reporting
E_ALL | E_STRICT
PHP 5.2.0 より前の開発用。
5.2 の導入 E_RECOVERABLE_ERROR
と 5.3 の導入 E_DEPRECATED
そして E_USER_DEPRECATED
. 。これらのバージョンのいずれかを実行している場合は、おそらくそれらをオンにすることをお勧めします。
マジックナンバーを使用したい場合は、 error_reporting
値をかなり高い値に設定 2^n-1
- 言う、 16777215
, 、そしてそれは実際には間のすべてのビットをオンにするだけです 1..n
. 。しかし、マジックナンバーを使用するのは良い考えではないと思います...
私の意見では、PHP は、 E_ALL
本当にすべてではありません。しかし、どうやらそれはPHP 6で修正される予定です...
新しい PHP バージョンでは、E_ALL にさらに多くのクラスのエラーが含まれます。PHP 5.3 以降、E_ALL にはすべてが含まれます を除外する E_STRICT。PHP 6 では、それさえも含まれると言われています。これは良いヒントです:表示されるエラー メッセージは少ないよりも多い方が良いです。
E_ALL に含まれるものについては、 PHP の事前定義定数 オンラインマニュアルのページ。
個人的には、E_STRICT を使用してもそれほど問題ないと思います。特に、PHP の将来のバージョンで壊れる可能性が低いスクリプトを作成できなくなる可能性があるため、特に害はありません。一方で、場合によっては、特に急いでいる場合には、厳格なメッセージがうるさすぎる場合があります。デフォルトでオンにして、煩わしい場合はオフにすることをお勧めします。
使用できます error_reporting = -1
常にすべてのビットで構成されます (E_ALL に含まれていない場合でも)。
このコードの長期サポート計画に応じて、次の方法でデバッグします。 E_STRICT
有効にすると、遠い将来でもコードが動作し続けるのに役立つかもしれませんが、日常的に使用するには過剰である可能性があります。重要なことが 2 つあります E_STRICT
心に留めておくべき:
- マニュアル通り, 、 ほとんど
E_STRICT
エラーは実行時ではなくコンパイル時に生成されます。エラーレベルを次のように上げている場合E_ALL
コード内で (経由ではなく) php.ini)、決して見ることはないかもしれませんE_STRICT
とにかくエラー。 E_STRICT
内に含まれていますE_ALL
PHP 6 では使用できますが、PHP 5 では使用できません。サーバーを PHP6 にアップグレードし、E_ALL
上記の #1 で説明したように設定すると、次のことが表示されます。E_STRICT
ユーザー側で追加の変更を必要とせずに、エラーを修正できます。
厳密に言うと、error_reporting ではありません。 強く 解析エラーや一般的な不具合 (条件内の代入など) を自動的に表示する IDE を使用することをお勧めします。
Zend Studio for Eclipse ではこの機能がデフォルトで有効になっており、使い始めてからずっと役に立っています。 たくさん エラーが発生する前にエラーをキャッチします。
たとえば、いくつかのデータをキャッシュしていた次のコードがありました。 $GLOBALS
変数ですが、うっかり書いてしまいました $_GLOBALS
その代わり。データは決してキャッシュされませんでした。Zend が次のように教えてくれなかったら、私は知りませんでした。「ねえ、これ $_GLOBALS
これは 1 回しか表示されないため、エラーである可能性があります。」
ini_set("表示エラー","2");ERROR_REPORTING(E_ALL);