web-dev-qa-db-ja.com

開発に推奨されるerror_reporting()設定は何ですか? E_STRICTはどうですか?

通常、私はE_ALLを使用して、コードを改善するためにPHPがコードについて言う可能性のあるものをすべて確認します。

エラー定数E_STRICTに気づきましたが、使用したことも聞いたこともありません。これは開発に使用するのに適した設定ですか?マニュアルには次のように書かれています。

実行時の通知。 PHPコードの変更を提案して、コードの最高の相互運用性と上位互換性を確保できるようにします。

だから私はerror_reportingで最高のE_ALLレベルを使用しているのか、それともE_STRICTと一緒にそれが最高でしょうか?それとも、私がまだ学んでいない他の組み合わせはありますか?

29
SeanDowney

PHP 5では、E_STRICTでカバーされているものはE_ALLでカバーされていないため、ほとんどの情報を取得するには、それらを組み合わせる必要があります。

 error_reporting(E_ALL | E_STRICT);

PHP 5.4では、E_STRICTE_ALLに含まれるため、E_ALLだけを使用できます。

使用することもできます

error_reporting(-1);

これは常にallエラーを有効にします。これは、次のようにより意味的に正しいです:

error_reporting(~0);
44
Jim

Php.iniで以下を使用します。

error_reporting = E_ALL | E_STRICT

また、インストールする必要があります Xdebug 、それは明るい色を盲目にすることであなたのエラーを強調し、有用な詳細情報を印刷することができます。

無害であっても、コードにエラーや通知を入れないでください。

10
Eduardo Marinho

私の意見では、開発段階でエラー報告レベルを高く設定するほど良いと思います。

ライブ環境では、わずかに(ただしわずかに)削減されたセットが必要ですが、ユーザーが見ることができない場所にログを記録する必要があります(私はsyslogを好みます)。

http://php.net/error_reporting

5.2.0より前のPHP)での開発用のE_ALL | E_STRICT

5.2ではE_RECOVERABLE_ERRORが導入され、5.3ではE_DEPRECATEDE_USER_DEPRECATEDが導入されています。これらのバージョンのいずれかを実行している場合は、これらをオンにすることをお勧めします。

マジックナンバーを使用したい場合は、error_reporting値を2^n-1のかなり高い値(たとえば16777215)に設定するだけで、実際には1..nの間のすべてのビットがオンになります。しかし、マジックナンバーを使用するのは良い考えではないと思います...

私の意見では、PHPは、E_ALLがすべてではないため、ボールを少し落としました。しかし、明らかにPHP 6 .. ..

5
Daniel Papasian

error_reporting = -1を使用できます
常にすべてのビットで構成されます(E_ALLにない場合でも)

2
RiaD

新しいPHPバージョンでは、E_ALLにはより多くのクラスのエラーが含まれます。PHP 5.3なので、E_ALLにはを除くすべてが含まれますE_STRICT。PHP 6では、それも含まれていると言われています。これは良いヒントです。エラーメッセージを少なくするよりも多く見る方がよいでしょう。

E_ALLに含まれるものは、オンラインマニュアルの PHPで定義された定数 ページに記載されています。

個人的には、E_STRICTを使えばそれほど問題ではないと思います。特に、将来のバージョンのPHPで破損する可能性がわずかにあるスクリプトを作成できなくなる可能性があるため、害はありません。一方、厳密なメッセージは、特に急いでいる場合は特に、ノイズが多すぎる場合があります。デフォルトでオンにし、煩わしい場合はオフにすることをお勧めします。

2
Jan Krüger

このコードの長期サポート計画によっては、E_STRICTを有効にしてデバッグすると、コードが遠い将来も機能し続けるのに役立つ場合がありますが、日常の使用にはおそらくやり過ぎです。 E_STRICTについて覚えておくべき2つの重要なことがあります。

  1. マニュアルによる 、ほとんどのE_STRICTエラーは、実行時ではなくコンパイル時に生成されます。コード内でエラーレベルをE_ALLに増やしている場合(php.ini経由ではない)、E_STRICTとにかくエラー。
  2. E_STRICTE_ALL内にPHP 6の下に含まれますが、PHP 5の下には含まれません。上記の#1で説明したようにE_ALLを構成すると、追加の変更を必要とせずにE_STRICTエラーが表示されるようになります。
1
stormlash

Error_reportingについて厳密に言えば、私は強く解析エラーと一般的なグリッチ(条件の割り当てなど)を自動的に表示するIDE)を使用することをお勧めします。

Zend Studio for Eclipseでは、この機能がデフォルトで有効になっています。使用を開始してから、エラーが発生する前にエラーをキャッチするのに役立ちました大いに

たとえば、このコードでは、データを$GLOBALS変数にキャッシュしていましたが、誤って$_GLOBALSと記述していました。データがキャッシュされることはなく、Zendが「ねえ、この$_GLOBALSは一度しか表示されないので、エラーの可能性があります」と言わなかったかどうかはわかりませんでした。

0
Pablo Borowicz