电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

PHP中斷言函數的使用詳解

瀏覽:6日期: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
相關文章:
主站蜘蛛池模板: 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 光环国际-新三板公司_股票代码:838504 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 全球化工设备网—化工设备,化工机械,制药设备,环保设备的专业网络市场。 | 电磁辐射仪-电磁辐射检测仪-pm2.5检测仪-多功能射线检测仪-上海何亦仪器仪表有限公司 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 精密模具-双色注塑模具加工-深圳铭洋宇通 | 标策网-专注公司商业知识服务、助力企业发展 | 蔬菜清洗机_环速洗菜机_异物去除清洗机_蔬菜清洗机_商用洗菜机 - 环速科技有限公司 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 上海logo设计| 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 |