目次
assert() アサーション関数" >assert() アサーション関数
assert_options() と php.ini の対応するパラメーター設定 " >assert_options() と php.ini の対応するパラメーター設定
总结" >总结
ホームページ バックエンド開発 PHPの問題 PHPでアサーション関数を使う方法

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

Jun 07, 2021 pm 05:31 PM
php

この記事では、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 設定 | デフォルト値 | 説明

  • ##ASSERT_ACTIVE assert.active1assert() を有効にするassertionASSERT_WARNINGassert.warning 1 失敗したアサーションごとに PHP 警告を生成しますASSERT_BAILassert.bail0中止アサーション失敗時の実行ASSERT_QUIET_EVALassert.quiet_eval0アサーション式内 評価時に error_reporting を無効にする ASSERT_CALLBACKassert.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 サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

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

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

    PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

    CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

    CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

    CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

    ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

    PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

    Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

    PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

    このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

    CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

    CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

    母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

    文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

    JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

    JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

    See all articles