2011-08-13 11 views
5

通常、PHPのスクリプトはE_NOTICEの後も実行されていますが、関数の文脈で致命的なエラーにこれを上げる方法はありますか?それは、私の関数ではなく、コアPHP関数ではなく、 。E_NOTICEでphpを終了させる方法は?

+3

なぜあなた自身の機能に制限する必要がありますか?コア関数がE_NOTICEをスローすると、それは通常あなたが間違って(自分の関数で)使用していることを意味します。だから私はすべてのE_NOTICEを捕まえたいと思うと思う。 'trigger_error'を使って手動で通知をトリガしない限り、E_USER_NOTICEをトリガする必要があります。これは区別が容易です。 – deceze

+1

私は主に自分の関数で少なくともE_NOTICEを終了することを考えました。私はE_USER_NOTICEの例外を記述することは無意味だと思います。この場合、プログラマーの目標は実際にその通知を作業に入れて実行を継続することです。 – rsk82

+1

「自分の機能にのみ注意してください」あなたはあなたが[トリガー](http://il2.php.net/manual/en/function.trigger-error.php)を自分で見たいと思っていますか?あなたの関数内で発生する通常の "コア" 'E_NOTICE'ですか? –

答えて

9

E_NOTICEをキャッチするカスタムエラーハンドラを作成できます。

これは未テストですが、右方向に行く必要があります。その後、

function myErrorHandler($errno, $errstr, $errfile, $errline) 
{ 
    if ($errno == E_USER_NOTICE) 
    die ("Fatal notice"); 
    else 
    return false; // Leave everything else to PHP's error handling 

} 

、それを離れるとき、あなたの関数を入力すると、PHPのエラーハンドラを復元するときset_error_handler()を使用して、新しいカスタムエラーハンドラとして設定:

function some_function() 
{ 

// Set your error handler 
$old_error_handler = set_error_handler("myErrorHandler"); 

... do your stuff .... 

// Restore old error handler 
set_error_handler($old_error_handler); 

} 
+1

"それは私の関数でのみ通知を終了する必要がありますが、コアphp関数ではなく、グローバルに" –

+1

@Rikudoそれはまさに上記のことですか?何が欠けている? –

+1

彼はそれがPHPコアE_NOTICEで死ぬことを望んでいませんが、E_USER_NOTICEは彼の機能によってトリガーされています:) –

2

あなたはset_error_handler()

<?php 

    function myErrorHandler($errno, $errstr, $errfile, $errline) { 
     if ($errno == E_USER_NOTICE) { 
      die("Died on user notice!! Error: {$errstr} on {$errfile}:{$errline}"); 
     } 
     return false; //Will trigger PHP's default handler if reaches this point. 
    } 

    set_error_handler('myErrorHandler'); 

    trigger_error('This is a E_USER_NOTICE level error.'); 
    echo "This will never be executed."; 


?> 
を使用して、カスタムエラーハンドラを使用します

Working Example

関連する問題