PHPでアサーション関数を使う方法

醉折花枝作酒筹
リリース: 2023-03-10 11:50:01
転載
1391 人が閲覧しました

この記事では、PHP のアサーション関数の使い方を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでアサーション関数を使う方法

当初、アサーション関連の関数は PHPUnit とこれらの単体テスト コンポーネントによって提供されていると思っていましたが、マニュアルを読んだ後、assert() アサーション関数が付属していることがわかりました。 PHP 自体の関数です。つまり、コード内で簡単なテストを実行する場合、単体テスト コンポーネント全体を完全に導入する必要はありません。

assert() アサーション関数

assert(1==1);

assert(1==2);
// assert.exception = 0 时,Warning: assert(): assert(1 == 2)
// assert.exception = 1 时,Fatal error: Uncaught AssertionError: 验证不通过
ログイン後にコピー

明らかに、コードの 2 番目の部分はアサーション検証に合格できません。このとき、PHP は警告または例外エラーを返します。なぜ 2 つのエラー形式が考えられるのでしょうか? php.ini のassert.Exception を off または 0 に設定した場合、つまりこのパラメータの機能をオフにした場合でも、プログラムは上記のコードのコメントと同様に、PHP5 の形式で警告を返します。

同時に、try...catch を通じて例外をキャプチャすることはできません。このパラメータは実際に、本物の例外オブジェクトをスローするかどうかを制御します。このパラメータをデフォルトのまま、つまり on または 1 に設定した場合、例外が直接スローされ、プログラムは終了します。

上記のコードからわかるように、アサーションの最初のパラメーターは式であり、ブール型オブジェクトを返す式が必要です。文字列や数値を渡すとどうなるでしょうか?

// 设置 assert.exception = 0 进行多条测试

assert(" ");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion " " failed

assert("1");
// Deprecated: assert(): Calling assert() with a string argument is deprecated

assert(0);
// Warning: assert(): assert(0) failed

assert(1);

assert("1==2");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion "1==2" failed
ログイン後にコピー

明らかに、最初のパラメータの式は型キャストされますが、文字列型には、assert() 関数に渡された文字列型の式の型が廃止されたことを示す廃止通知が表示されます。現在のテスト バージョンは 7.3 です。将来的には、操作を終了させるエラーや例外が直接報告される可能性があります。

主な問題は、渡された文字列自体も式である場合、判断がこの式の内容に基づいて行われるため、コードの最後の部分と同様に、あいまいさが生じやすいことです。もちろん、古い使用方法は依然として推奨されません。ここでは、理解だけを述べます。

次に、assert() 関数の他のパラメーターを見てみましょう。その 2 番目のパラメーターは、エラー情報を定義するために使用される文字列、または例外が発生したことをスローするために使用される例外クラスの 2 つのタイプがあります。

assert(1==1, "验证不通过");

assert(1==2, "验证不通过");
// Warning: assert(): 验证不通过 failed
ログイン後にコピー

文字列を直接指定すると、定義したエラーメッセージの内容が警告メッセージに表示されます。これは非常に理解しやすいです。

// 注意 assert.exception 设置不同的区别

assert(1==1,  new Exception("验证不通过"));

assert(1==2,  new Exception("验证不通过"));
// assert.exception = 1 时,Fatal error: Uncaught Exception: 验证不通过
// assert.exception = 0 时,Warning: assert(): Exception: 验证不通过
ログイン後にコピー

もちろん、アサーションで例外をスローする例外クラスを指定することもできます。デフォルトでは、この例外がスローされるとプログラムの実行が中止されます。これは通常の例外スロー プロセスであり、try...catch を使用して例外をキャッチできます。

try{
    assert(1==2,  new Exception("验证不通过"));
}catch(Exception $e){
    echo "验证失败!:", $e->getMessage(), PHP_EOL;
}
// 验证失败!:验证不通过
ログイン後にコピー

アサーションの全体的な操作に影響するパラメーターがもう 1 つあります。それは、php.ini の zend.assertions パラメーターです。これには 3 つの値が含まれています:

  • 1、コードを生成して実行します。通常、
  • 0 はテスト環境で使用されます。コードは生成されますが、
  • を通過します。
  • - 実行時 1. コードは生成されません。通常、

は正式な環境で使用されます。テストは自分で設定できます。デフォルトの php.ini のデフォルト値は次のとおりです。 1、これはassert()関数の通常の実行です。

assert_options() と php.ini の対応するパラメーター設定

PHP のアサーション関数には、便利に設定および取得するためのassert_options() 関数も用意されています。アサーション機能に関連するパラメータ設定。設定できるアサーション フラグは次のとおりです:

フラグ | INI 設定 | デフォルト値 | 説明