PHP 5.2.0で実装されたerror_get_last()
という関数があります。これは直前に発生したエラーの情報を返すもので、エラーの情報をPHPの配列の形で取り出すことができます。
<?php
@$a = $b;
var_dump(error_get_last());
このPHPスクリプトを実行すると、次のように直前のエラーに関する情報が得られます。
array(4) {
["type"]=>
int(8)
["message"]=>
string(21) "Undefined variable: b"
["file"]=>
string(12) "/tmp/foo.php"
["line"]=>
int(2)
}
エラーを「@」で抑制していてもエラー情報が取り出せるのは少し面白いですね。
しかし、この関数を繰り返し使うことを考えると、この内容をリセットできた方が便利です。これを実現するのが、PHP7で実装されたerror_clear_last()
です。
<?php
@$a = $b;
var_dump(error_get_last()['message']); // string(21) "Undefined variable: b"
var_dump(error_get_last()['message']); // string(21) "Undefined variable: b"
error_clear_last();
var_dump(error_get_last()); // NULL
そもそもerror_get_last()
なんて関数はじめて知った、というのが正直な感想ですけどね…。