日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP中斷言函數的使用詳解

瀏覽:34日期:2022-09-07 15:59:42

原來一直以為斷言相關的函數是 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: 驗證不通過

很明顯,第二段代碼無法通過斷言驗證。這時,PHP 就會返回一個警告或者異常錯誤。為什么有可能是兩種錯誤形式呢?當我們設置 php.ini 中的 assert.exception 為 off 或者 0 時,也就是關閉這個參數的能力時,程序就會以 PHP5 的形式依然返回一個警告,就像上面代碼中的注釋一樣。同時,通過 try...catch 也無法進行異常的捕獲了。這個參數其實就是控制是否以正宗的異常對象進行拋出。如果保持這個參數為默認情況也就是設置為 on 或者 1 的話,就會直接拋出異常,程序中止。

從上述代碼可以看出,斷言的第一個參數是一個表達式,而且是需要一個返回 bool 類型對象的表達式。如果我們傳遞的是一個字符串或者一個數字呢?

// 設置 assert.exception = 0 進行多條測試assert(' ');// Deprecated: assert(): Calling assert() with a string argument is deprecated// Warning: assert(): Assertion ' ' failedassert('1');// Deprecated: assert(): Calling assert() with a string argument is deprecatedassert(0);// Warning: assert(): assert(0) failedassert(1);assert('1==2');// Deprecated: assert(): Calling assert() with a string argument is deprecated// Warning: assert(): Assertion '1==2' failed

很明顯第一個參數的表達式會進行類型強制轉換,但是字符串類型會多出一個過時提醒,表明給 assert() 函數傳遞字符串類型的表達式類型已經過時了。當前的測試版本是 7.3 ,在將來可能就會直接報中止運行的錯誤或異常了。主要問題在于,如果傳遞的字符串本身也是一個表達式的話,會以這個表達式的內容為基礎進行判斷,這樣很容易產生歧義,就像最后一段代碼一樣。當然,已經過時的使用方式還是不推薦的,這里僅是做一個了解即可。

接下來我們看一下 assert() 函數的其他參數,它的第二個參數是兩種類型,要么給一個字符串用來定義錯誤的信息,要么給一個 異常類 用于拋出異常。

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;}// 驗證失敗!:驗證不通過

另外還有一個參數會對斷言的整體運行產生影響,那就是 php.ini 中的 zend.assertions 參數。它包含三個值:

1,生成并執行代碼,一般在測試環境使用 0,生成代碼但是在運行時會路過 -1,不生成代碼,一般在正式環境使用

這個參數大家可以自行配置測試,默認的 php.ini 中它的默認值是 1 ,也就是正常的執行 assert() 函數。

assert_options() 及相對應的 php.ini 中的參數配置

PHP 中的斷言功能還為我們提供了一個 assert_options() 函數,用于方便地設置和獲取一些和斷言能力有關的參數配置。它能夠設置的斷言標志包括:

標志 | INI設置 | 默認值 | 描述

| :-: | :-: | -:

ASSERT_ACTIVE | assert.active | 1 | 啟用 assert() 斷言 ASSERT_WARNING | assert.warning | 1 | 為每個失敗的斷言產生一個 PHP 警告(warning) 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 單元測試打下基礎,當然,本身這個能力的東西就不是很多,大家記住就好啦!

測試代碼:

github.com/zhangyue050…

以上就是PHP中斷言函數的使用詳解的詳細內容,更多關于PHP中斷言函數的使用的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩欧美一区二区三区在线观看| 国产精品一页| 人在线成免费视频| 欧美1区二区| 国产精品久久久久久久久久久久久久久 | 欧美日韩国产亚洲一区| 日本精品影院| 欧美色图一区| 伊人成人在线视频| 日本欧美在线看| 蜜桃一区二区三区在线| 亚洲欧洲美洲国产香蕉| 热久久免费视频| 日韩av电影一区| 日韩精品导航| 久久精品免视看国产成人| 国产一区2区| 韩国三级一区| 国产在线不卡| 蜜臀精品一区二区三区在线观看| 亚洲欧洲美洲国产香蕉| 国产麻豆精品久久| 国产精品成人一区二区不卡| 久久久精品久久久久久96| 亚洲精品2区| 亚洲三级在线| 欧美a在线观看| 国产理论在线| 91精品观看| 综合五月婷婷| 老司机精品视频网| 婷婷精品视频| 欧美一级二级三级视频| 97视频热人人精品免费| 韩日一区二区三区| 日韩精品五月天| 国内不卡的一区二区三区中文字幕| 色天使综合视频| 免费中文字幕日韩欧美| 欧美亚洲综合视频| 日韩中文字幕高清在线观看| 亚洲欧美日本国产专区一区| 日韩精品免费观看视频| 国精品产品一区| 午夜国产精品视频免费体验区| 亚洲精品欧洲| 红杏一区二区三区| 91成人精品| 国产精品一卡| 激情五月综合| 国产欧美91| 国产91久久精品一区二区| 日韩三级视频| 日韩在线看片| 日本a级不卡| 久久精品动漫| 欧美日韩精品一区二区三区视频| 国产精品久久久久久久免费观看| 亚洲一区久久| 水蜜桃精品av一区二区| 日韩中文字幕区一区有砖一区 | 黄色国产精品| 国产精品777777在线播放| 国产一区观看| 麻豆国产精品| 亚洲欧洲免费| 成人免费电影网址| 国产欧美一区二区三区米奇| 免费精品国产的网站免费观看| 国产精品亚洲一区二区在线观看 | 亚洲狼人精品一区二区三区| 久久午夜影院| 亚洲午夜91| 天堂成人国产精品一区| 9久re热视频在线精品| 亚洲天堂av影院| 一区视频在线| 欧美成人久久| 免费久久99精品国产自在现线| 天堂日韩电影| 亚洲精品一级| 日韩高清成人在线| 国产一区二区三区探花| 蜜桃一区二区三区在线观看| 9999国产精品| 欧美日韩a区| aⅴ色国产欧美| 国产精品不卡| 国产欧美欧美| 久久不射网站| 欧美午夜精彩| 国产精品毛片一区二区在线看| 日韩av在线播放中文字幕| 久久99伊人| 深夜视频一区二区| 97在线精品| 成人精品高清在线视频| 国产精品久久久一区二区| 亚洲综合图色| 一区在线免费| 亚洲高清影视| 久久久久欧美精品| 欧美丰满日韩| 久久精品午夜| 欧美精品成人| 欧美一区网站| 日本a口亚洲| 日韩高清一区| 亚洲精品成人一区| 日韩午夜av在线| 好看的av在线不卡观看| 日韩精品首页| 久久久久99| 久久婷婷亚洲| 精品国模一区二区三区| 成人午夜精品| 九九精品调教| 欧美日韩精品免费观看视欧美高清免费大片 | 久久青草久久| 国产自产自拍视频在线观看 | 国产图片一区| 欧美日韩亚洲三区| 亚洲精品国产精品粉嫩| 日韩中文欧美在线| 亚洲一区中文| 国产精品人人爽人人做我的可爱 | 日韩深夜视频| 日韩av免费| 亚洲国产专区校园欧美| 91看片一区| 欧美色图国产精品| 在线国产一区| 首页亚洲欧美制服丝腿| 日韩精品一卡二卡三卡四卡无卡| 亚洲精品乱码日韩| 国产精品亚洲二区| 久久免费福利| a国产在线视频| 亚洲一级少妇| 久久精品av| 视频在线观看一区二区三区| 五月国产精品| 国产精品伊人| 国产日韩电影| 久久网站免费观看| 午夜亚洲福利在线老司机| 亚洲人成网77777色在线播放| 欧美日韩一区二区国产| 精品一区二区三区的国产在线观看| 欧美激情视频一区二区三区在线播放| 成午夜精品一区二区三区软件| 日韩国产网站| 亚洲一区二区免费在线观看| 久久精品xxxxx| 国产一区二区三区久久久久久久久| 日韩电影免费网站| 一区在线免费观看| 日韩精品一级二级| 国产精品magnet| 久久精品三级| 1024精品一区二区三区| 亚洲伊人精品酒店| 欧美激情视频一区二区三区免费 | 日韩成人精品一区| 欧美a级片一区| 日韩欧美中文字幕电影| 国产精品1区| 日韩和的一区二在线| 男女激情视频一区| 国产精品nxnn| 波多野结衣一区| 91精品国产自产观看在线| 国产中文欧美日韩在线| 黄色亚洲精品| 国产精品亚洲欧美日韩一区在线| 日韩中文影院| 日本免费新一区视频| 日韩电影免费网址| 日本亚洲不卡| 特黄特色欧美大片| 日本成人在线网站| av免费不卡国产观看| 亚洲专区视频| 日韩免费视频| 日韩av网站在线免费观看| 久久精品中文| 国产精品一卡| 欧美日韩国产探花| 国产精品久久久久久av公交车| 亚洲二区在线| 国产精品超碰| 国产麻豆综合| 国内精品麻豆美女在线播放视频| 尤物网精品视频| 精品国产亚洲日本| 丝袜脚交一区二区| 国产精品麻豆久久| 日韩激情视频网站| 免费毛片在线不卡| 精品在线网站观看|