2016-12-01 20 views
2

次コード:error_get_last()は、set_error_handler()の後にnullを返します。 PHP 7.0

$a["x"];//should trigger notice 
var_dump(error_get_last());//return the error array 

完全に実行され、エラーの配列を返します。 私はそれがこのコードはPHP5.4に完璧に動作し、私は私がチェックするためにシャットダウン機能を使用していますerror_get_last() にPHP7に3ヶ月前に変更して以来、私は取得していますヌルたnull

function _do_nothing(){} 
set_error_handler('_do_nothing'); 

$a["x"];//should trigger notice 
var_dump(error_get_last());//return null 

を返すはset_error_handler使用する場合エラーが発生した場合はそれを開発者に送信します。

  1. このコードをPHP7で実行する方法はありますか? set_error_handler()でerror_get_last()を動作させますか?
  2. 回避策の他のアイデアはありますか?シャットダウン機能を最後のエラーにする私はCodeIgniterを使用しており、内部コードをハックしたくはありません。
+0

1のように、PHP5でも同じです。これは、4年前の私のコードが突然動作を停止した理由を理解するのに役立ちました。 – agoldev

答えて

0

これは、あなたがset_error_handler('_do_nothing')を削除する場合は、エラーはもう処理されませんし、あなたが得るあなたの例ではエラーがすでに_do_nothing()関数によって処理されるため、正常な動作ですので、error_get_last()戻りnull

最後のエラーは再び

function _do_nothing(){} 
//set_error_handler('_do_nothing'); 

$a["x"];//should trigger notice 
var_dump(error_get_last());//return array() "Undefined variable: a" 

この動作は、PHPのバージョンを言及するためPHP7

+0

しかし、エラーハンドラ内で 'error_get_last()'が呼び出されると、大きな違いがあります。カスタム関数を使用してエラー(例:解析エラー)をキャッチしようとすると、その関数 'error_get_last()'の '_do_nothing()'と 'error_get_last()'を呼び出すと、PHP 5でエラーが返されます。しかし、PHP 7. *では 'NULL'を返します。 – agoldev

+0

それはもっと複雑です。実際、PHP 5とPHP 7の動作が異なると、カスタム例外ハンドラを登録する必要があります。私はこれをここに書いています:https://stackoverflow.com/questions/47728546/error-get-last-returns-null-in-php-7-when-a-custom-exception-handler-is-set – agoldev

関連する問題