この記事では、PHP でアサーション関数を使用する方法を説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
当初、アサーション関連の関数は PHPUnit とこれらの単体テスト コンポーネントによって提供されていると思っていましたが、マニュアルを読んだ後、assert() アサーション関数が付属していることがわかりました。 PHP 自体の関数です。つまり、コード内で簡単なテストを実行する場合、単体テスト コンポーネント全体を完全に導入する必要はありません。
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 つの値が含まれています:
は正式な環境で使用されます。テストは自分で設定できます。デフォルトの php.ini のデフォルト値は次のとおりです。 1、これはassert()関数の通常の実行です。
PHP のアサーション関数には、便利に設定および取得するためのassert_options() 関数も用意されています。アサーション機能に関連するパラメータ設定。設定できるアサーション フラグは次のとおりです:
フラグ | INI 設定 | デフォルト値 | 説明
ASSERT_ACTIVE |assert.active | 1 |assert() アサーションを有効にする ASSERT_WARNING |assert.warning | 1 |失敗したアサーションごとに PHP 警告を生成します ASSERT_BAIL |assert.bail |0 |アサーション失敗時の実行中止 ASSERT_QUIET_EVAL |assert.quiet_eval |0 |アサーション式の評価時に error_reporting を無効にする ASSERT_CALLBACK |assert.callback | (NULL) | アサーションが失敗したときにコールバック関数を呼び出す
これらのパラメーターの意味は非常に理解しやすいので、自分でテストできます。最後の ASSERT_CALLBACK の関数を見てみましょう。実際、その説明も非常に明確です。つまり、アサーションが失敗すると、このオプションで定義されたコールバック関数に入ります。
assert_options(ASSERT_ACTIVE, 1); assert_options(ASSERT_WARNING, 1); assert_options(ASSERT_BAIL, 1); assert_options(ASSERT_CALLBACK, function($params){ echo "====faild====", PHP_EOL; var_dump($params); echo "====faild====", PHP_EOL; }); assert(1!=1); // ====faild==== // string(105) ".../source/一起学习PHP中断言函数的使用.php" // ====faild====
アサーションが失敗すると、コールバック関数に入り、コールバック関数はコールバック関数に渡されたパラメータの内容を出力するだけです。このコールバック関数で渡されたファイル情報はアサーションを渡すことができないことがわかります。
アサーション関数の使用と構成をマスターすることを学ぶことは、将来 PHPUnit 単体テストを学ぶための基礎を築くことができます。この能力には多くのことが含まれています。皆さんも覚えておいてください。
测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E4%B8%80%E8%B5%B7%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E6%96%AD%E8%A8%80%E5%87%BD%E6%95%B0%E7%9A%84%E4%BD%BF%E7%94%A8.php
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHP でのアサーション関数の使用法に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。