成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

PHP 批斗大會之缺失的異常

guqiu / 3024人閱讀

摘要:背后性能影響還是挺大的。缺失的異常剛開始寫代碼的時候一直不明白為什么要用異常,感覺就能搞定了,為什么還要多此一舉,現(xiàn)在反而覺得的異常太少。在的時候,如果出現(xiàn)異常,可以通過來獲取。

作為一名深度 phper,我如果要黑咱們 php,就像說自己母校差一樣,大家不要見外。
個人博客地址:https://mengkang.net/1368.html
故事的開始

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

缺失的異常

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

對比兩種序列化場景,一個是json,另一個是serialize。

json

json encode/decode的時候,如果出現(xiàn)異常,可以通過json_last_error()來獲取。

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

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

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

為什么要捕獲異常

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

代碼演示
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()); // 無法捕獲
}

輸出結(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 代碼的異常設(shè)計(jì)還是任重而道遠(yuǎn)的,而這些已經(jīng)設(shè)定的“舊的規(guī)范”要推翻,需要“勇氣”,畢竟會影響所有的使用者。

很多群里老是有語言之爭的聊天,我一般都看看罷了,也不參與。類似的例子,不勝枚舉,后面我會持續(xù)輸出一些 php 自黑的博客,希望 php 代碼更加健壯、安全。也希望大家不要只看到 php 干活快,快的背后隱藏著無數(shù)的潛在風(fēng)險,php 雖好,但是也不能貪杯哦。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/31739.html

相關(guān)文章

  • PHP小知識點(diǎn)

    摘要:那些瑣碎的知識點(diǎn)作者記錄的的很奇特很難記的知識點(diǎn)。易錯知識點(diǎn)整理注意和的區(qū)別中和都是輸出的作用,但是兩者之間還是有細(xì)微的差別。今天手頭不忙,總結(jié)一下,分享過程中掌握的知識點(diǎn)。 深入理解 PHP 之:Nginx 與 FPM 的工作機(jī)制 這篇文章從 Nginx 與 FPM 的工作機(jī)制出發(fā),探討配置背后的原理,讓我們真正理解 Nginx 與 PHP 是如何協(xié)同工作的。 PHP 那些瑣碎的知識...

    hover_lew 評論0 收藏0
  • 深度學(xué)習(xí)是否以蠻力取勝?

    摘要:第一條是關(guān)于深度學(xué)習(xí)的晚宴,討論的是背后的數(shù)學(xué)支撐,以及未來的方向。大數(shù)據(jù)與深度學(xué)習(xí)是一種蠻力盡管當(dāng)場說了很多觀點(diǎn),但是最核心的還是援引了愛因斯坦關(guān)于上帝的隱喻。不過,我自己并不同意深度學(xué)習(xí)必須等同于機(jī)器蠻力。 Vladimir Vapnik 介紹:Vladimir Vapnik 被稱為統(tǒng)計(jì)學(xué)習(xí)理論之父,他出生于俄羅斯,1990 年底移居美國,在美國貝爾實(shí)驗(yàn)室一直工作到 2002 年,之后加...

    CarlBenjamin 評論0 收藏0
  • 大數(shù)據(jù)與深度學(xué)習(xí)是一種蠻力?

    摘要:進(jìn)一步說,如果承認(rèn)深度學(xué)習(xí)系統(tǒng)在解決問題時不可思議的表現(xiàn),那么大數(shù)據(jù)和深度學(xué)習(xí),都有某種蠻力的味道。不過,我自己并不同意深度學(xué)習(xí)必須等同于機(jī)器蠻力。 Facebook去年底挖來了一個機(jī)器學(xué)習(xí)大神Vladimir Vapnik,他是統(tǒng)計(jì)學(xué)習(xí)理論和支持向量機(jī)的主要發(fā)明者。Vladimir Vapnik被稱為統(tǒng)計(jì)學(xué)習(xí)理論之父,他出生于俄羅斯,1990年底移居美國,在美國貝爾實(shí)驗(yàn)室一直工作到2002...

    lidashuang 評論0 收藏0
  • 大數(shù)據(jù)與深度學(xué)習(xí)是一種蠻力?

    摘要:大數(shù)據(jù)與深度學(xué)習(xí)是一種蠻力盡管當(dāng)場說了很多觀點(diǎn),但是最核心的還是援引了愛因斯坦關(guān)于上帝的隱喻。大數(shù)據(jù)與深度學(xué)習(xí)是一種蠻力在算法和模型上,我們是否能發(fā)明所有東西認(rèn)為,在機(jī)器學(xué)習(xí)的算法和模型上,我們并不能發(fā)明所有東西。 Facebook去年底挖來了一個機(jī)器學(xué)習(xí)大神Vladimir Vapnik,他是統(tǒng)計(jì)學(xué)習(xí)理論和支持向量機(jī)的主要發(fā)明者。Vladimir Vapnik被稱為統(tǒng)計(jì)學(xué)習(xí)理論之父,他出生...

    yankeys 評論0 收藏0
  • 阿里巴巴發(fā)布智能運(yùn)維故障管理AI+生態(tài)計(jì)劃

    摘要:開放生態(tài)計(jì)劃,回饋社會阿里巴巴全球運(yùn)行指揮中心掌門人沈乘黃首先分享了智能運(yùn)維在阿里巴巴線上故障管理領(lǐng)域的應(yīng)用經(jīng)驗(yàn)。 摘要: 為響應(yīng)馬老師家國情懷,世界擔(dān)當(dāng)?shù)奶栒伲_放AI+生態(tài)計(jì)劃,將讓集團(tuán)內(nèi)部服務(wù)過程中積累下的技術(shù)與經(jīng)驗(yàn)更好地回饋社會,任何企業(yè)或合作伙伴均可以簡單方便的接入阿里巴巴智能故障管理平臺,通過對接入數(shù)據(jù)的訓(xùn)練學(xué)習(xí)實(shí)時提供異常檢測、關(guān)聯(lián)分析、根因定位的能力,使原有的IT管理模...

    codecraft 評論0 收藏0

發(fā)表評論

0條評論

guqiu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<