中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PHP中使用斷言函數

發布時間:2021-04-27 15:54:08 來源:億速云 閱讀:261 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在PHP中使用斷言函數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

PHP開發環境搭建工具有哪些

一、phpStudy,是一個新手入門最常用的開發環境。二、WampServer,WampServer也同樣的也是和phpStudy一樣操作簡單對小白比較友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包;四、MAMP,MAMP分為兩種MAMP和MAMP Pro for Mac。五、寶塔面板,寶塔面板是一款服務器管理軟件,支持windows和linux系統。六、UPUPW,UPUPW是目前Windows平臺下最具特色的Web服務器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====

以上就是怎么在PHP中使用斷言函數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

高邮市| 孟津县| 朝阳县| 商河县| 上杭县| 景德镇市| 临澧县| 哈尔滨市| 苏尼特左旗| 台中市| 南康市| 金阳县| 德庆县| 宁陕县| 金秀| 尉氏县| 澄江县| 密云县| 聊城市| 阿坝县| 左云县| 辽宁省| 新乐市| 巴彦淖尔市| 卢氏县| 巨野县| 任丘市| 大化| 渭南市| 巴中市| 九龙坡区| 缙云县| 天水市| 宜兰市| 中西区| 绵阳市| 峡江县| 漳平市| 文昌市| 北碚区| 两当县|