PHP 7 の例外

PHP 7 の例外は、下位互換性と古いassert() 関数の拡張のために使用されます。これにより、運用環境でゼロコストのアサーションが可能になり、カスタム例外やエラーをスローする機能が提供されます。

API の古いバージョンは、互換性の目的で引き続き維持されます。assert() は、最初のパラメーターを計算する文字列やテストするブール値だけでなく、式にすることができる言語構造になりました。


assert()の設定

設定項目デフォルト値オプション値
zend.assertions1
  • 1 - コードを生成して実行する (開発モード)

  • 0 - コードを生成しますが、実行時にスキップします

  • -1 - コードを生成しません(本番環境)

assert.Exception0
  • 1 - アサーションが失敗した場合にスローされます。例外オブジェクトがスローされる可能性があります。例外が提供されない場合は AssertionError オブジェクト インスタンスがスローされます。成0

  • - Throwableを使用または生成します。オブジェクトをスローするのではなく、オブジェクトによって生成される警告のみです(PHP 5と互換性があります)

パラメータ

  • 。 PHP 5 では、実行用の文字列またはテスト用のブール値。 PHP 7 では、これは任意の値を返す式にすることができ、その結果はアサーションが成功したかどうかを示すために使用されます。
  • description

  • が失敗した場合、オプションの説明が失敗メッセージに含まれます。
  • 例外assertion

  • PHP 7 では、2 番目のパラメーターは文字列ではなく Throwable オブジェクトにすることができます。これは、アサーションが失敗し、assert.Exception が有効な場合にスローされます。
  • Instance

    Set zend.assertions to 0:

Instance

<?php
ini_set('zend.assertions', 0);
assert(true == false);
echo 'Hi!';
?>

上記のプログラム実行出力は次のとおりです:

Hi!

Set zend.assertions to 1,設定されています1:
インスタンス
<?php
ini_set('zend.assertions', 1);
ini_set('assert.exception', 1);
assert(true == false);
echo 'Hi!';
?>

上記のプログラム実行出力結果は次のとおりです:

Fatal error: Uncaught AssertionError:assert(true == false) in -:2
Stack Trace:

#0 -(2): assert(false, 'assert(true == ...')

#1 {main}
が2行目でスローされました