成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

PHP中缺失異常的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹PHP中缺失異常的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

廣德ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

故事的開(kāi)始


這幾天觀(guān)察錯(cuò)誤日志發(fā)現(xiàn)有一個(gè)數(shù)據(jù)反序列化的notice錯(cuò)誤,實(shí)際情況我是從緩存中讀取數(shù)據(jù)然后反序列化,因?yàn)榉葱蛄谢?,所以?shí)際每次都是去數(shù)據(jù)庫(kù)取的值。背后性能影響還是挺大的。

缺失的異常


剛開(kāi)始寫(xiě)代碼的時(shí)候一直不明白為什么要用異常,感覺(jué)if else就能搞定了,為什么還要多此一舉,現(xiàn)在反而覺(jué)得 php 的異常太少。

對(duì)比兩種序列化場(chǎng)景,一個(gè)是json,另一個(gè)是serialize。

json


在json encode/decode的時(shí)候,如果出現(xiàn)異常,可以通過(guò)json_last_error()來(lái)獲取。

https://www.php.net/manual/en...


這樣的設(shè)計(jì)只能說(shuō)勉強(qiáng)夠用,不太符合面向?qū)ο蟮奶茁贰?/p>

serialize/unserialize


在使用自帶的序列化和反序列化的時(shí)候,相比json的處理,則更加簡(jiǎn)單粗暴,沒(méi)有函數(shù)能拿到最后的錯(cuò)誤,只會(huì)通過(guò)自定義的error handler來(lái)接管,然后自己去做出一些相應(yīng)的處理。

為什么要捕獲異常


比如我的代碼比較亂,有的 key 是 json 序列化,有的 key 是 serialize。我們可以將 key 分類(lèi)。不能確保其他人配置的對(duì)應(yīng)關(guān)系是對(duì)的,或者有的人忘記了,所以我需要用捕獲異常的方式來(lái)兜底,這樣我們的代碼更加健壯一些。當(dāng)unserialize失敗之后,我們可以嘗試去json_decode,而不是立即返回一個(gè)false,從而把請(qǐng)求傳遞到數(shù)據(jù)庫(kù)。

代碼演示


error_reporting(E_ALL);

$a = ["a" => 1];

class UnSerializeException extends ErrorException
{

}

set_error_handler(function ($severity, $message, $file, $line) {
  $info = explode(":", $message);

  if ($severity == E_NOTICE) {
    if ($info[0] == "unserialize()") {
      throw new UnSerializeException($message);
    }
    return true;
  } else {

    throw new ErrorException($message, 0, $severity, $file, $line);;
  }
});


try {
  $b = unserialize(json_encode($a));
} catch (ErrorException $exception) {
  var_dump(get_class($exception), $exception->getMessage(), $exception->getTraceAsString()); // 捕獲到了
} finally {
  restore_error_handler();
}

try {
  $b = unserialize(json_encode($a));
} catch (ErrorException $exception) {
  var_dump(get_class($exception), $exception->getMessage(), $exception->getTraceAsString()); // 無(wú)法捕獲
}

輸出結(jié)果

string(20) "UnSerializeException"
string(43) "unserialize(): Error at offset 0 of 7 bytes"
string(181) "#0 [internal function]: {closure}(8, 'unserialize(): ...', '/Users/mengkang...', 34, Array)
#1 /Users/mengkang/PhpstormProjects/xxx/test.php(34): unserialize('{"a":1}')
#2 {main}"

Notice: unserialize(): Error at offset 0 of 7 bytes in /Users/mengkang/PhpstormProjects/xxx/test.php on line 42


以上是“PHP中缺失異常的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前題目:PHP中缺失異常的示例分析-創(chuàng)新互聯(lián)
文章URL:http://jinyejixie.com/article18/cchodp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶(hù)體驗(yàn)、搜索引擎優(yōu)化、網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
孟州市| 诏安县| 镇远县| 上虞市| 娱乐| 铜山县| 海阳市| 衡东县| 南华县| 特克斯县| 南通市| 南通市| 军事| 西贡区| 梁河县| 宜宾市| 西昌市| 马山县| 河北区| 城固县| 永丰县| 张北县| 临高县| 体育| 龙海市| 加查县| 霍山县| 穆棱市| 潮州市| 房山区| 洞头县| 年辖:市辖区| 洪江市| 安龙县| 洪洞县| 克山县| 松滋市| 麻江县| 礼泉县| 锦屏县| 鹤峰县|