エラー処理機構の変更
1. Exception と Error という 2 つの例外クラスが追加されました。
PHP7 には、Exception と Error という 2 つの例外クラスが追加されました。どちらのクラスも新しいインターフェイス Throwable を実装します。例外処理コードでは、型ヒントを調整する必要がある場合があります。
2. 一部の致命的エラーと回復可能な致命的エラーは、Error オブジェクトをスローするように変更されました。
一部の致命的エラーと回復可能な致命的エラーは、代わりに Error オブジェクトを報告するようになりました。エラー オブジェクトは Exception から独立しており、通常の try/catch ではキャッチできません。編集者注: エラー処理関数を登録する必要があります。以下の RFC を参照してください。
例外になったこれらの回復可能な致命的なエラーは、エラー ハンドラーを通じてサイレントに無視することはできません。特に、タイプヒントエラーは無視できません。
3. 構文エラーは ParseError オブジェクトをスローします
構文エラーは、Error オブジェクトを継承する ParseError オブジェクトをスローします。 eval() を処理する前に、潜在的にエラーが発生しやすいコードの戻り値または error_get_last() をチェックすることに加えて、ParseError オブジェクトもキャプチャする必要があります。
4. 内部オブジェクトの構築メソッドは、失敗した場合に常に例外をスローします。
内部オブジェクトの構築メソッドは、失敗した場合に常に例外をスローします。以前のコンストラクターの中には、NULL または使用できないオブジェクトを返すものがありました。
5. 一部の E_STRICT エラーのレベルが調整されました。
PHP 7 エラー処理
#PHP 7 では、ほとんどのエラーが報告される方法が変更されています。 PHP 5 の従来のエラー報告メカニズムとは異なり、ほとんどのエラーはエラー例外としてスローされるようになりました。
この種の Error 例外は、通常の例外と同様に try / catch ブロックでキャッチできます。一致する try / catch ブロックがない場合、 例外処理関数 (set_Exception_handler() で登録) が呼び出されて処理されます。 例外ハンドラーが登録されていない場合は、従来の方法で処理され、致命的エラーとして報告されます。
Error クラスは Exception クラスから拡張されていないため、catch (Exception $e) { ... } のようなコードはキャッチできません。 エラーに。 catch (Error $e) { ... } のようなコードを使用するか、例外処理関数 ( set_Exception_handler()) を使用してエラーをキャッチします。
エラー例外階層- 算術エラー
- アサーションエラー
- DivisionByZeroError
- 解析エラー
- タイプエラー
<?php class MathOperations { protected $n = 10; // 求余数运算,除数为 0,抛出异常 public function doOperation(): string { try { $value = $this->n % 0; return $value; } catch (DivisionByZeroError $e) { return $e->getMessage(); } } } $mathOperationsObj = new MathOperations(); print($mathOperationsObj->doOperation()); ?>
Modulo by zero
API の古いバージョンは、互換性の目的で引き続き維持されます。assert() は、最初のパラメータを、評価される文字列やブール値だけでなく、式にすることができる言語構造になりました。テストされること。 assert() 設定
設定項目
デフォルト値オプション値
#zend.assertions11 - コードの生成と実行 (開発mode) | 0 - コードを生成しますが、実行中はスキップします | |
#assert.Exception | 0
|