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

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

PHP中斷言函數的使用詳解

瀏覽:30日期: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久久,三上悠亚国产精品一区二区三区
欧美一级精品| 日韩国产一区二区三区| 图片区亚洲欧美小说区| 欧美va亚洲va日韩∨a综合色| 久久精品国产大片免费观看| 欧美亚洲国产精品久久| 色婷婷久久久| 蜜臀久久99精品久久久久宅男 | 亚洲天堂1区| 午夜av不卡| 欧美www视频在线观看| 亚洲h色精品| 极品av在线| 中文字幕中文字幕精品| 久久不卡日韩美女| 精品日韩视频| 欧美天堂一区二区| 桃色一区二区| 久久成人精品| 国产日韩三级| japanese国产精品| 欧美午夜网站| japanese国产精品| 成人污污视频| 国产精品色在线网站| 亚洲少妇在线| 欧美国产一级| 国产另类在线| 午夜久久av| 精品中文字幕一区二区三区av| 精品中文字幕一区二区三区| 日韩精品欧美大片| 亚洲a一区二区三区| 成人综合一区| 亚洲在线免费| 国产高清一区二区| 成人免费网站www网站高清| 国产一区二区三区探花| 国产麻豆精品| 国产日产精品_国产精品毛片| 欧美资源在线| 久久av一区| 免播放器亚洲| 亚洲影院天堂中文av色| 水蜜桃久久夜色精品一区的特点| 欧美日韩中文一区二区| 国产精品久久久久久久久妇女| 国产午夜一区| 免费在线观看一区| 尹人成人综合网| 午夜欧美巨大性欧美巨大| 色偷偷偷在线视频播放| 日韩国产专区| 中文无码日韩欧| 日韩在线观看中文字幕| 日本午夜精品| 999久久久精品国产| 黄色精品网站| 亚洲影视一区二区三区| 动漫av一区| 久久天堂精品| 日韩影院免费视频| 久久字幕精品一区| 亚洲成人精品| 亚洲a成人v| 国产极品一区| 在线亚洲人成| 久久国产尿小便嘘嘘| 日韩av三区| 日韩免费看片| 国产精品老牛| 欧美日韩一二三四| 国产欧美日韩| 久久亚洲精品中文字幕蜜潮电影| 久久亚洲欧美| 国产精品不卡| 亚洲开心激情| 美女黄网久久| 国产精品一区二区精品视频观看| 亚洲日本欧美| 国产在线不卡一区二区三区| 欧美特黄一区| 美女在线视频一区| 日韩在线一区二区| 国产精品成人a在线观看| 免费看欧美美女黄的网站| 国产精品videosex极品| 国产精品毛片在线| 98精品视频| 日韩精品乱码av一区二区| 久久久成人网| 亚洲欧美久久精品| 五月天久久777| 精品少妇av| 欧美亚洲国产日韩| 国产亚洲毛片| 久久国产生活片100| 国产精品美女| 午夜电影亚洲| 激情综合自拍| 黑人精品一区| 国产精品一区毛片| 日本一二区不卡| 欧美一区激情| 欧美一级全黄| 狠狠久久婷婷| 国产精品日韩久久久| 欧美在线资源| 国产精品日本欧美一区二区三区| 国产黄色一区| 国产精品亚洲人成在99www| 在线综合视频| 色偷偷色偷偷色偷偷在线视频| 国产高清亚洲| 国产福利资源一区| 国产精品网址| 国产精品久一| 国产经典一区| 日韩中文字幕一区二区高清99| 伊人久久大香伊蕉在人线观看热v| 国产一区日韩一区| 99久久婷婷| 中文字幕日韩亚洲| 国产一精品一av一免费爽爽| 偷拍欧美精品| 一区二区国产精品| 麻豆9191精品国产| 欧美在线91| 欧美影院三区| 亚洲精品黄色| 精品久久久网| 91精品xxx在线观看| 欧美特黄一区| 日韩欧美久久| 日韩在线综合| 国产精品婷婷| 青草国产精品久久久久久| 视频一区欧美精品| 久久爱www.| 九九99久久精品在免费线bt| 欧美日韩免费观看视频| 亚洲欧美日本日韩| 夜久久久久久| 欧美国产亚洲精品| 午夜日韩福利| 里番精品3d一二三区| 亚洲精品在线观看91| 国产精品丝袜在线播放| 免费福利视频一区二区三区| 爽好多水快深点欧美视频| 欧美国产日韩电影| 另类激情亚洲| 91tv亚洲精品香蕉国产一区| 欧美视频久久| 欧美日韩一二| 国产精品嫩模av在线| 蜜桃成人av| 国产精品videossex久久发布| 亚洲天堂一区二区| 国产伦乱精品| 亚洲影视一区| 亚洲成a人片| 老司机精品视频网| 日韩免费精品| 久久亚洲国产精品一区二区| 丝袜av一区| 精品欠久久久中文字幕加勒比| 亚洲精品护士| 香蕉视频成人在线观看| 国产传媒在线| 美女精品视频在线| 蜜臀av免费一区二区三区| 激情综合在线| 久久久久久婷| 欧美一区激情| 免费在线观看成人| 天堂√8在线中文| 欧美黄页在线免费观看 | 麻豆精品蜜桃| 国产精品永久| 精品久久久久久久| 四虎精品永久免费| www成人在线视频| 久久精品一区二区国产| 日本va欧美va精品| 日韩三级视频| 午夜电影一区| 中文字幕一区二区三区在线视频| 日韩精品永久网址| 国产极品嫩模在线观看91精品| 伊人久久一区| 亚洲毛片网站| 亚洲理论在线| 男人操女人的视频在线观看欧美| 91精品蜜臀一区二区三区在线 | 久久精品亚洲欧美日韩精品中文字幕| 久久99性xxx老妇胖精品| 国产欧美丝祙| 国产精品对白| 精品理论电影在线|