久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

淺談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: 驗證不通過

很明顯,第二段代碼無法通過斷言驗證。這時,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 " " 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() 函數的其他參數,它的第二個參數是兩種類型,要么給一個字符串用來定義錯誤的信息,要么給一個 異常類 用于拋出異常。

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 單元測試打下基礎,當然,本身這個能力的東西就不是很多,大家記住就好啦!

測試代碼: 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視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美极品中文字幕| 激情五月综合| 亚洲女人av| 中文在线日韩| 国产欧美一区二区三区精品观看| 日韩在线麻豆| 国产精成人品2018| 精精国产xxxx视频在线播放| 久久精品高清| 国产精品av久久久久久麻豆网| 韩国精品主播一区二区在线观看| 久久亚洲国产| 日本99精品| 97人人精品| 午夜在线精品| 国产精品观看| 久久高清精品| 香蕉成人久久| 美女精品视频在线| 欧美1级日本1级| 日韩影片在线观看| 日产午夜精品一线二线三线| 欧美日韩一二三四| 国产精品夜夜夜| 免费在线成人| 一区二区视频欧美| 老色鬼精品视频在线观看播放| 欧美福利一区| 精品欧美日韩精品| 国产综合精品| 青青国产91久久久久久| 亚洲高清二区| 成人午夜在线| 欧美日韩一区自拍| 亚洲精品a级片| 成人亚洲一区二区| 国产欧美69| 亚洲另类av| 国产农村妇女精品一区二区| 国产精品1区| 亚洲三级网站| 亚洲精品网址| 99精品一区| 日韩一区二区三区免费播放| 欧美日韩一区二区三区不卡视频 | 啪啪国产精品| 久久尤物视频| 国产亚洲精aa在线看| 中文日韩欧美| 日韩欧美三区| 国产精品7m凸凹视频分类| 国产精品成人a在线观看| 国产日产高清欧美一区二区三区| 亚洲欧美日韩国产综合精品二区| 性欧美xxxx免费岛国不卡电影| 国产66精品| 久久97视频| 国产精品白丝一区二区三区| 国产欧美高清视频在线| 欧美日一区二区在线观看| 日本色综合中文字幕| 日韩成人精品一区二区三区 | 国产在线看片免费视频在线观看| 国产精品一级| 欧美国产另类| 国产精品久久久一区二区| 在线精品福利| 日韩精品成人| 久久99蜜桃| 里番精品3d一二三区| 国产日韩欧美一区| 精品视频一二| 国产精品成人3p一区二区三区| 久久精品国产999大香线蕉| 日本亚洲最大的色成网站www | 国产亚洲一区在线| 日本99精品| 日韩理论视频| 日韩专区一卡二卡| 国产精品一区二区99| 91一区二区| 亚洲中字黄色| 国产精品久久久久久av公交车| 日韩va欧美va亚洲va久久| 日韩精品久久久久久| 成人亚洲一区二区| 亚洲精品在线影院| 亚洲天堂久久| 国产精品毛片| 精品资源在线| 亚洲欧洲日本mm| 久久激情五月婷婷| 伊人久久大香线蕉av不卡| 亚洲一二av| 98精品视频| 亚洲先锋成人| 国产农村妇女精品一区二区| 少妇精品久久久一区二区 | 日韩精品成人| 高清一区二区| 亚洲二区三区不卡| 亚洲日产国产精品| 首页国产精品| 国产精品极品| 蜜桃av一区二区在线观看| 韩日一区二区| 97久久超碰| 人人爽香蕉精品| 日韩在线欧美| 国产成人精品一区二区三区视频 | 久久久一本精品| 欧美偷窥清纯综合图区| 高清日韩中文字幕| 久久精品99久久久| 在线精品国产亚洲| 香蕉久久精品| 久久久人人人| 丝袜av一区| 国产91精品对白在线播放| 成人看片网站| 丝袜av一区| 日韩视频一区二区三区在线播放免费观看| 亚洲资源av| 欧美sm一区| 日韩精品水蜜桃| 日本在线啊啊| 亚洲午夜黄色| 性欧美精品高清| 亚洲精品国产日韩| 日韩精品亚洲专区在线观看| 综合欧美亚洲| 国产精品欧美三级在线观看| 国产精品66| 国产91在线精品| 久久精品123| 一区在线观看| 日韩不卡手机在线v区| 国产精品igao视频网网址不卡日韩| 麻豆精品久久久| 日韩av福利| 亚洲丝袜啪啪| 久久亚洲资源中文字| 色88888久久久久久影院| 蜜桃久久久久久| 久久尤物视频| 日韩高清中文字幕一区二区| 久久麻豆精品| 日韩av影院| 亚洲电影有码| 亚洲尤物av| 国产成人精品999在线观看| 国产高清一区| 国产女人18毛片水真多18精品| 91精品久久久久久久久久不卡| 国产视频一区免费看| 国产精品探花在线观看| 久久视频精品| 国产精品亚洲二区| 欧美日韩国产亚洲一区| 国产精品久久久久久久免费软件 | 日韩在线综合| 欧美亚洲网站| 2023国产精品久久久精品双 | 丝袜美腿亚洲色图| 国产一区二区三区久久| 男人的天堂亚洲一区| 日韩欧美一区二区三区免费看| 三级久久三级久久久| 红桃视频国产精品| yellow在线观看网址| 亚洲免费一区三区| 欧美丰满日韩| 国产精品男女| 青青草国产精品亚洲专区无| 黑丝一区二区三区| 日韩精品一区二区三区免费观看| 久久国际精品| 91嫩草精品| 免费看欧美美女黄的网站| 成人免费电影网址| 日本蜜桃在线观看视频| 国产欧美日韩在线观看视频| 日韩一区精品视频| 亚洲欧美久久| 免费精品视频| 久久国产精品久久久久久电车| 国产精品毛片一区二区在线看| 国产精品大片| 鲁大师精品99久久久| 国产精品a久久久久| 国产精品亚洲四区在线观看| 日韩av资源网| 久久超碰99| 精品一区二区三区免费看| 青青伊人久久| 国产精品视频首页| 久久久久久婷| 91精品国产乱码久久久久久久| 亚洲婷婷免费| 亚洲精品福利|