2008-09-16 11 views
28

通常、私はE_ALLを使用して、PHPがコードを改善しようとしていることを知りました。開発に推奨されるerror_reporting()設定は何ですか? E_STRICTはどうですか?

私はちょうどエラー定数E_STRICTに気付いたことがありますが、それについては一度も聞いたことはありませんでしたが、これは開発に使う良い設定ですか?マニュアルには、

ランタイム通知が記載されています。 PHPがコードの変更を提案するようにすると、コードの相互運用性と互換性が保証されます。

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

答えて

43

を起こって、E_STRICTによってカバーされ、物事がそのようにほとんどの情報を取得するには、E_ALLによってカバーされていない、あなたがそれらを結合する必要があります。

error_reporting(E_ALL | E_STRICT); 

PHP 5.4では、E_ALLE_STRICTが含まれますので、ちょうどE_ALLを使用できます。

また、常にすべてエラーが有効になります

error_reporting(-1); 

を使用することができます。これはより意味的に正しいものです:

error_reporting(~0); 
+1

PHP> = 5.4の場合、E_ALLICにE_ALL – mTorres

+1

@ hakreが含まれていることに気付きました。この回答を編集したことが分かりません。あなたは明らかに、「難解なシステム」では、「-1!=〜0」が可能であることを意味しています。これらの難解なシステムとは何か、本当に存在していますか? PHPの整数は、CコンパイラがPHPのコンパイルに使用したフォーマットに格納されていることを推測するのは正しいでしょうか?そして、例えば補完的なCコンパイラでPHPをコンパイルする仮想シナリオを考えていますか?とにかく、Gordonのコードスニペットを修正するだけでは、効果的に "実際には、最後の段落が間違っている"という編集を残すよりも良いでしょうか? –

+1

-1は数値です。数値演算子です。負の整数がどのように処理されるかに応じて〜0を表すことができますが、そうしてはいけません。そうでないところでは、それは私が「難解な」という名前のシステムです。技術的に間違っているのは、数値演算子の代わりにビット演算子〜を使いたいということです。 http://stackoverflow.com/questions/1967360/what-does-this-operator-mean-hereこれは通常あなたが表現したいものです。したがって、コードは、より正確な表現を使用することにあまり間違いありません。はい、私はそれを一度経験しました。しかし、これはもう少し前のことですが、私が心から再現できないことを尋ねられた最後の時間です。 – hakre

-1

ini_set( "display_errors"、 "2"); ERROR_REPORTING(E_ALL);

+0

OKで構成されますerror_reporting = -1
を使用して、PHPの関数名は大文字小文字を区別しませんが、あなたはむしろそれにそれが使用されるべき方法を使用する必要があります(例えば、 'error_reporting(E_ALL | E_STRICT)'、関数の名前は大文字で書かれていません)。ところで、 'E_ALL'はPHPバージョン5.4よりも' E_STRICT'を含んでいません。 – Sk8erPeter

5

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

ライブ環境では、わずかに(わずかながら)縮小されたセットが必要ですが、ユーザが見ることができない場所にログインしたい(私はsyslogが好ましい)。 PHPでの開発のための

http://php.net/error_reporting

E_ALL | E_STRICT 5.2.0の前に。

5.2は、を導入し、5.3は、E_DEPRECATEDおよびE_USER_DEPRECATEDを導入する。これらのバージョンのいずれかを実行している場合は、それらを有効にすることをお勧めします。

あなたはちょうど2^n-1のいくつかのかなり高い値にerror_reporting値を設定することができマジックナンバーを使用したい場合は - 、16777215を言うと、それは本当にただ1..n間のすべてのビットをオンにします。しかし、私は魔法の数字を使うのは良い考えではないと思っています...

私の意見では、PHPはE_ALLが本当にすべてではないということでボールを少し落としました。しかし、どうやらPHP 5で... PHP 6で修正される

2

新しいPHPバージョンでは、E_ALLにはさらに多くのクラスのエラーが含まれています。 PHP 5.3以降、E_ALLにはが含まれています( E_STRICTを除く)。 PHP 6では、それにも拘束されます。これは良いヒントです。より少ないエラーメッセージではなく、より多くのエラーメッセージを表示する方がよいでしょう。

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

個人的には、E_STRICTを使用するとそれほど重要ではないと思います。確かにあなたを傷つけることはありません。特に、PHPの将来のバージョンで壊れる可能性の少ないスクリプトを書くことを妨げる可能性があるからです。一方、厳密なメッセージは、おそらく特にあなたが急いでいる場合は、おそらくあまりにも騒々しいことがあります。私はあなたがデフォルトでそれをオンにし、それが迷惑になるとオフにすることをお勧めします。

+0

E_STRICTは5.4以降のE_ALLに含まれています。 –

1

このコードの長期的なサポート計画によっては、E_STRICTを有効にしてデバッグすると、遠くの将来もコードを作業するのに役立ちますが、おそらく日常的な使用には過剰です。

  1. Per the manual、最もE_STRICTエラーは、実行時ではない、コンパイル時に生成されます。心に留めておくべきE_STRICTに関する二つの重要なものがあります。あなたのコード内でエラーレベルをE_ALLに増やしている場合(php.iniを経由しない場合)、とにかくE_STRICTエラーが表示されることがあります。
  2. E_STRICTはPHP 6の下E_ALL内に含まれていますが、PHP6にサーバーをアップグレードすると、上記#1で説明したようE_ALLが設定されている場合はPHP 5の下で、あなたは上の任意の追加の変更を必要とせずにE_STRICTエラーを確認するために開始されますありませんあなたの部分。
+0

E_STRICTは5.4以降のE_ALLに含まれています。 PHP 6ではなく – Lee

0

は、厳密にはerror_reportingの話していない、私は強くは自動的に解析エラーと共通グリッチ(状態で例えば、割り当て)を示す任意のIDEを使用してお勧めしたいです。

Zend Studio for Eclipseは、この機能をデフォルトで有効にしています。使用開始以来、私はを多く手助けしてエラーが発生する前にキャッチしています。

例えば、私は$GLOBALS変数のデータをキャッシュしていましたが、代わりに$_GLOBALSを書きました。データがキャッシュされることはありませんでした。Zendが私に言わなかったかどうかは分かりませんでした。「ねえ、$_GLOBALSのthingyが一度だけ表示される、それはエラーかもしれません。

10

は、php.iniに次のように使用します。また、あなたはXdebugをインストールする必要があり

error_reporting = E_ALL | E_STRICT 

、それは明るい色とプリント有益な詳細情報を盲目にあなたのエラーを強調表示することができます。

無害であっても、あなたのコードにいかなるエラーや注意もしないでください。

2

あなたはそれは常にすべてのビット(彼らはE_ALLに含まれていない場合でも)