10

コードを PHP 5.2 から 5.4 に移行したいと考えています。これは、私が使用するすべてのコードが、初期化なしでメンバーを持つオブジェクトを使用するだけで広範囲に使用されることを除いて、これまでのところ正常に機能しました。

$MyObject->MyMember = "Hello";

その結果、「空の値からデフォルト オブジェクトを作成しています」という警告が表示されます。

私は解決策が使用されることを知っています:

$MyObject = new stdClass();
$MyObject->MyMember = "Hello";

しかし、これをさまざまなプロジェクトで何度も使用しているため、すべてのコードでこれを変更するのは大変な作業です。スタイルが良くないことはわかっていますが、残念ながら、これをすべてのコードに追加するのに今後数週間を費やすことはできません。

警告を報告しないように php error_reporting を設定できることはわかっていますが、それでも他の警告や通知を取得できるようにしたいと考えています。この警告は、E_STRICT を有効または無効にしてもまったく影響がないようです。この警告を無効にする方法はありますか?!

4

4 に答える 4

8

技術的には、警告用に独自のエラーハンドラをインストールすることでこれを行うことができます。ハンドラーの内部から、文字列エラーメッセージを確認します。抑制したい場合は、それ以外の場合は、デフォルトのエラーハンドラに処理を任せます。return truereturn false

ただし、この誤用が発生した場合は、正しいことを行い、コードを手動で修正することをお勧めします。他に何もないとしても、正しい習慣を身に付けることができるからです。これが有償の作業でない限り(この場合、通常、実装の純粋さを無効にする懸念があります)、これを教訓と見なし、正しいことを行ってください。

于 2012-11-10T16:57:38.097 に答える
4

警告を報告しないように php error_reporting を設定できることはわかっていますが、それでも他の警告や通知を取得できるようにしたいと考えています。

エラー報告を無効にせず、適切なレベルのままにしますが、display_errorsディレクティブを無効にします。

ini_set('display_errors', 0);

本番環境で画面に通知を出力する理由はありません。

次に、Jon が言ったように、まだ使用していない場合はカスタム エラー ハンドラを使用します。例:

function my_error_handler($error_level, $error_message)
{
    // write error message to log file
}
set_error_handler('my_error_handler');

エラー報告レベルを の 2 番目のパラメータに渡すことができますset_error_handler。このようにして、時間をかけて正しいことを行うことができます。つまり、通知の生成を停止するようにコードを修正します。

多くのサイトを 5.4 に移行する場合は、display_errorsすべてを修正するのに十分な時間が得られるまで、php.ini でサーバー管理者を無効にすることができます。いっそのこと、アップグレードする前にすべてをステージングして修正しますが、それはオプションではないかもしれません.

于 2012-11-10T17:05:07.657 に答える
2

PHP 用の IDE を実際に使用して、これを行うことができます。

検索する$MyObject->MyMember = "Hello";

結果を探して、正しい結果が得られた場合は、次のものに置き換えてみてください。

$MyObject = new stdClass();
$MyObject->MyMember = "Hello";

だから多分IDEはあなたのために長い仕事をするでしょう...

于 2013-03-23T21:27:37.167 に答える
0
于 2014-02-04T18:28:12.533 に答える