



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第PHP中斷言函數(shù)的使用詳解總結(jié)
原來一直以為斷言相關(guān)的函數(shù)是PHPUnit這些單元測試組件提供的,在閱讀手冊后才發(fā)現(xiàn),這個assert()斷言函數(shù)是PHP本身就自帶的一個函數(shù)。也就是說,我們在代碼中進(jìn)行簡單的測試的時候是不需要完全引入整個單元測試組件的。
assert()斷言函數(shù)
assert(1==1);
assert(1==2);
//assert.exception=0時,Warning:assert():assert(1==2)
//assert.exception=1時,F(xiàn)atalerror:UncaughtAssertionError:驗證不通過
很明顯,第二段代碼無法通過斷言驗證。這時,PHP就會返回一個警告或者異常錯誤。為什么有可能是兩種錯誤形式呢?當(dāng)我們設(shè)置php.ini中的assert.exception為off或者0時,也就是關(guān)閉這個參數(shù)的能力時,程序就會以PHP5的形式依然返回一個警告,就像上面代碼中的注釋一樣。同時,通過try...catch也無法進(jìn)行異常的捕獲了。這個參數(shù)其實就是控制是否以正宗的異常對象進(jìn)行拋出。如果保持這個參數(shù)為默認(rèn)情況也就是設(shè)置為on或者1的話,就會直接拋出異常,程序中止。
從上述代碼可以看出,斷言的第一個參數(shù)是一個表達(dá)式,而且是需要一個返回bool類型對象的表達(dá)式。如果我們傳遞的是一個字符串或者一個數(shù)字呢?
//設(shè)置assert.exception=0進(jìn)行多條測試
assert("");
//Deprecated:assert():Callingassert()withastringargumentisdeprecated
//Warning:assert():Assertion""failed
assert("1");
//Deprecated:assert():Callingassert()withastringargumentisdeprecated
assert(0);
//Warning:assert():assert(0)failed
assert(1);
assert("1==2");
//Deprecated:assert():Callingassert()withastringargumentisdeprecated
//Warning:assert():Assertion"1==2"failed
很明顯第一個參數(shù)的表達(dá)式會進(jìn)行類型強(qiáng)制轉(zhuǎn)換,但是字符串類型會多出一個過時提醒,表明給assert()函數(shù)傳遞字符串類型的表達(dá)式類型已經(jīng)過時了。當(dāng)前的測試版本是7.3,在將來可能就會直接報中止運(yùn)行的錯誤或異常了。主要問題在于,如果傳遞的字符串本身也是一個表達(dá)式的話,會以這個表達(dá)式的內(nèi)容為基礎(chǔ)進(jìn)行判斷,這樣很容易產(chǎn)生歧義,就像最后一段代碼一樣。當(dāng)然,已經(jīng)過時的使用方式還是不推薦的,這里僅是做一個了解即可。
接下來我們看一下assert()函數(shù)的其他參數(shù),它的第二個參數(shù)是兩種類型,要么給一個字符串用來定義錯誤的信息,要么給一個異常類用于拋出異常。
assert(1==1,"驗證不通過");
assert(1==2,"驗證不通過");
//Warning:assert():驗證不通過failed
如果直接給的一個字符串,那么在警告的提示信息中,顯示的就是我們定義的這個錯誤信息的內(nèi)容。這個非常好理解。
//注意assert.exception設(shè)置不同的區(qū)別
assert(1==1,newException("驗證不通過"));
assert(1==2,newException("驗證不通過"));
//assert.exception=1時,F(xiàn)atalerror:UncaughtException:驗證不通過
//assert.exception=0時,Warning:assert():Exception:驗證不通過
當(dāng)然,我們也可以給一個異常類讓斷言拋出一個異常。在默認(rèn)情況下,這個異常的拋出將中止程序的運(yùn)行。也就是一個正常的異常拋出流程,我們可以使用try...catch進(jìn)行異常的捕獲。
assert(1==2,newException("驗證不通過"));
}catch(Exception$e){
echo"驗證失?。?",$e-getMessage(),PHP_EOL;
//驗證失敗!:驗證不通過
另外還有一個參數(shù)會對斷言的整體運(yùn)行產(chǎn)生影響
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中藥制劑技術(shù)模擬試題+參考答案
- 上海中心大廈買賣合同
- 酒店住宿預(yù)訂取消政策協(xié)議
- 鋼筋檢測考試題及答案
- 浙江國企招聘2025臺州溫嶺市糧食收儲有限責(zé)任公司招聘14人筆試參考題庫附帶答案詳解
- 2025重慶金納動力科技有限公司招聘22人筆試參考題庫附帶答案詳解
- 2025浙江寧波交通工程建設(shè)集團(tuán)有限公司招聘30人筆試參考題庫附帶答案詳解
- 2025河北唐山政務(wù)服務(wù)外包有限公司為服務(wù)項目招聘66人筆試參考題庫附帶答案詳解
- 加油站項目投資前景分析報告
- 透徹理解紡織工藝的試題及答案
- 2025屆廣東省廣州市省實教育集團(tuán)中考生物對點突破模擬試卷含解析
- 河道疏浚及堤防工程施工重難點及相關(guān)技術(shù)保證措施
- 出國人員安全教育
- 2025年中石化招聘筆試參考題庫含答案解析
- 湖南省邵陽市2024年中考物理試卷(解析版)
- 2025年中考語文復(fù)習(xí)之小題狂練300題(選擇題):語法知識(20題)
- 天津中考英語2020-2024年5年真題匯編-教師版-專題07 完成句子
- 應(yīng)用PDCA降低藥占比
- 風(fēng)電場道路施工安全管理方案
- 漁業(yè)基礎(chǔ)設(shè)施與裝備現(xiàn)代化考核試卷
- 高一生物生物膜的流動鑲嵌模型練習(xí)題(含答案)
評論
0/150
提交評論