この記事では、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 設定 | デフォルト値 | 説明
##ASSERT_ACTIVE assert.active 1 assert() を有効にするassertion 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 サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
