PHP 7.2.7 Released

PHP 7 でのエラー

PHP 7 は大半のエラーがどのようにPHPから報告されるかを変更しています。 PHP 5 で使われていたこれまでのエラー報告メカニズムを使うかわりに、 大半のエラーを Error 例外としてスローするようになったのです。

通常の例外と同様、Error 例外も、 最初にマッチした catch ブロックで現れます。 マッチするブロックがなければ、set_exception_handler() で設定したデフォルトの例外ハンドラが呼ばれます。 デフォルトの例外ハンドラもない場合は、例外が fatal error に変換されて、 これまでのバージョンのエラーと同じように扱われます。

Error クラスは Exception を継承していないので、 キャッチし損ねた例外を catch (Exception $e) { ... } ブロックで受け止めているような PHP 5 のコードでは、 Error をキャッチできません。 catch (Error $e) { ... } ブロックを用意するか、あるいは set_exception_handler() でハンドラを設定する必要があります。

add a note add a note

User Contributed Notes 7 notes

up
71
hungry dot rahly at gmail dot com
2 years ago
You can catch both exceptions and errors by catching(Throwable)
up
33
demis dot palma at tiscali dot it
1 year ago
Throwable does not work on PHP 5.x.

To catch both exceptions and errors in PHP 5.x and 7, add a catch block for Exception AFTER catching Throwable first.
Once PHP 5.x support is no longer needed, the block catching Exception can be removed.

try
{
   // Code that may throw an Exception or Error.
}
catch (Throwable $t)
{
   // Executed only in PHP 7, will not match in PHP 5
}
catch (Exception $e)
{
   // Executed only in PHP 5, will not be reached in PHP 7
}
up
6
ryan dot jentzsch@{gmail} dot com
10 months ago
An excellent blog post on the difference between exceptions, throwables and how PHP 7 handles these can be found here: https://trowski.com/2015/06/24/throwable-exceptions-and-errors-in-php7/
up
10
lubaev dot ka at gmail dot com
1 year ago
php 7.1

try {
   // Code that may throw an Exception or ArithmeticError.
} catch (ArithmeticError | Exception $e) {
   // pass
}
up
1
wr_sorarara at yahoo dot co dot jp
1 month ago
the node said that i can get the error by catch{Error $e}block or a set_exception_handler() handler is required.
here is my code:
try{
    array_key_exists('key',null);
}
catch(\Throwable | \Error | \Exception $e){
    echo 'hello error';
}

I deliberately wrote a warning code and the output is "Warning: array_key_exists() expects parameter 2 to be array, null given in"

the result i want is "hello error" but i didn't get it.

and in the other code :
set_error_handler('show_error');

try{
    array_key_exists('key',null);
}
catch(\Throwable | \Error | \Exception $e){
    echo 'hello error';
}

function show_error(\Error $e){
    echo "show_error:"
    echo $e->getMessage();
}

the output is "hello error".

i don't know how the error can be caught  by the catch block.
up
-58
Egor Gubanov
1 year ago
What should I do to let the program to react to warnings? I've already tried to write try/catch construction, but it doesn't working.
up
-53
Teo
1 year ago
Maybe you want to suppress warnings in errlog? If so, then just prepend function name with @ sign.
To Top