php抑制错误,PHP 行内错误抑制
顯示行號(hào)
|
選擇喜歡的代碼風(fēng)格
默認(rèn)
GitHub
Dune
LakeSide
Plateau
Vibrant
Blue
Eighties
Tranquil
你可以讓 PHP 利用錯(cuò)誤控制操作符 @ 來(lái)抑制特定的錯(cuò)誤。將這個(gè)操作符放置在表達(dá)式之前,其后的任何錯(cuò)誤都不會(huì)出現(xiàn)。
看如下 PHP 代碼:
echo @$foo['bar'];
如果 $foo['bar'] 存在,程序會(huì)將結(jié)果輸出,如果變量 $foo 或是 'bar' 鍵值不存在,則會(huì)返回 null 并且不輸出任何東西。如果不使用錯(cuò)誤控制操作符,這個(gè)表達(dá)式會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息 PHP Notice: Undefined variable: foo 或 PHP Notice: Undefined index: bar 。
這看起來(lái)像是個(gè)好主意,不過(guò)也有一些討厭的代價(jià)。PHP 處理使用 @ 的表達(dá)式比起不用時(shí)效率會(huì)低一些。過(guò)早的性能優(yōu)化在所有程序語(yǔ)言中也許都是爭(zhēng)論點(diǎn),不過(guò)如果性能在你的應(yīng)用程序 / 類庫(kù)中占有重要地位,那么了解錯(cuò)誤控制操作符的性能影響就比較重要。
其次,錯(cuò)誤控制操作符會(huì) 完全 吃掉錯(cuò)誤。不但沒(méi)有顯示,而且也不會(huì)記錄在錯(cuò)誤日志中。此外,在正式環(huán)境中 PHP 也沒(méi)有辦法關(guān)閉錯(cuò)誤控制操作符。也許你認(rèn)為那些錯(cuò)誤時(shí)無(wú)害的,不過(guò)那些較具傷害性的錯(cuò)誤同時(shí)也會(huì)被隱藏。
如果有方法可以避免錯(cuò)誤抑制符,你應(yīng)該考慮使用,舉例來(lái)說(shuō),上面的程序代碼可以這樣重寫(xiě):
echo isset($foo['bar']) ? $foo['bar'] : '';
當(dāng) fopen() 載入文件失敗時(shí),也許是一個(gè)使用錯(cuò)誤抑制符的合理例子。你可以在嘗試載入文件前檢查是否存在,但是如果這個(gè)文件在檢查后才被刪除,而此時(shí) fopen() 還未執(zhí)行 (聽(tīng)起來(lái)有點(diǎn)不太可能,例子似乎比較極端,但是確實(shí)會(huì)發(fā)生),這時(shí) fopen() 會(huì)返回 false 并且 拋出操作。這也許應(yīng)該由 PHP 本身來(lái)解決,但這時(shí)一個(gè)錯(cuò)誤抑制符才能有效解決的例子。
xdebug.scream = On
前面我們提到在正式的 PHP 環(huán)境中沒(méi)有辦法關(guān)閉錯(cuò)誤控制操作符。但是 Xdebug 有一個(gè) xdebug.scream 的 ini 配置項(xiàng),可以關(guān)閉錯(cuò)誤控制操作符。你可以按照下面的方式修改 php.ini。
ini_set('xdebug.scream', '1')
「Scream」這個(gè) PHP 擴(kuò)展提供了和 xDebug 類似的功能,只是 Scream 的 ini 設(shè)置項(xiàng)叫做 scream.enabled 。
當(dāng)你在調(diào)試代碼而錯(cuò)誤信息被隱藏時(shí),這是最有用的方法。請(qǐng)務(wù)必小心使用 scream ,而是把它當(dāng)作暫時(shí)性的調(diào)試工具。有許多的 PHP 函數(shù)類庫(kù)代碼也許無(wú)法在錯(cuò)誤抑制操作符停用時(shí)正常使用。
PHP 錯(cuò)誤處理擴(kuò)展閱讀
發(fā)表評(píng)論
總結(jié)
以上是生活随笔為你收集整理的php抑制错误,PHP 行内错误抑制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 笔记本电脑怎么连接显示屏
- 下一篇: php+compose+使用,docke