日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php通知多有人,PHP通知抑制;只有某些情况/方法

發(fā)布時(shí)間:2023/12/2 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php通知多有人,PHP通知抑制;只有某些情况/方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

tl; dr – 在非常嚴(yán)格的環(huán)境中工作時(shí),是否有一種有效的方法來管理PHP的錯(cuò)誤報(bào)告級(jí)別,因?yàn)槟承┝鞒淘诓惶珖?yán)格的級(jí)別下會(huì)變得更容易?

好的;首先,我不相信“錯(cuò)誤抑制”是一個(gè)解決方案.我(有理由確定我)從未使用過@ error suppress運(yùn)算符,并且無意這樣做.我利用set_error_handler()和ErrorException(或一些派生),我在error_reporting(-1)中開發(fā)(未來證明E_ALL | E_STRICT)

現(xiàn)在,我不想改變這些習(xí)慣,因?yàn)槲野l(fā)現(xiàn)它們是一種很好的做法(同樣;如果有人有進(jìn)一步改進(jìn)我的開發(fā)/生產(chǎn)環(huán)境設(shè)置/實(shí)踐的建議,我會(huì)全力以赴)

然而,當(dāng)談到視圖生成時(shí),這可能會(huì)有點(diǎn)乏味.如果控制器由于某種原因無法將某些數(shù)據(jù)傳遞給視圖,那么正確的數(shù)據(jù)(數(shù)組索引,變量等)并不總是可用的.只要此數(shù)據(jù)對(duì)于查看生成不重要,視圖仍應(yīng)呈現(xiàn).

我更喜歡這種語法,因?yàn)樗皇侨唛L(zhǎng)的,但(我認(rèn)為)非常容易理解:

// e() is a shortcut function; given the passed value evaluates to a boolean true

// it will echo() and return true, otherwise it simply returns false

當(dāng)然,如果$data [‘field’]沒有在沒有索引的情況下返回null來調(diào)用offsetGet(),那么我們就會(huì)遇到問題.注意遇到異常,異常遇到腳本失敗.

我已經(jīng)嘗試了不同的實(shí)現(xiàn),包括使用類似節(jié)點(diǎn)的類創(chuàng)建數(shù)據(jù)樹來管理傳遞給視圖的數(shù)據(jù)列表/行. __get()實(shí)際上會(huì)創(chuàng)建不存在的節(jié)點(diǎn)(在分配或訪問時(shí))(為了簡(jiǎn)化節(jié)點(diǎn)數(shù)據(jù)分配,并防止發(fā)出通知.__set()測(cè)試有效性,并且會(huì)適當(dāng)?shù)胤祷豧alse)它還實(shí)現(xiàn)了ArrayAccess for訪問節(jié)點(diǎn)數(shù)據(jù),只會(huì)在缺失的索引上返回null.

由于PHP的神奇之處,我選擇放棄這個(gè)實(shí)現(xiàn)(雖然我學(xué)到了很多關(guān)于重構(gòu)/優(yōu)化和分析的知識(shí))

我改為使用原生數(shù)組,但現(xiàn)在我的視圖的代碼庫(kù)充斥著isset(),坦率地說這只是令人惱火(幾乎超過上述實(shí)現(xiàn)的性能損失)

現(xiàn)在,我認(rèn)為最簡(jiǎn)單的解決方法是根據(jù)我們?cè)谀_本中的位置來上下滑動(dòng)error_reporting():

// View::render()

public function render($data){

error_reporting(E_ALL & ~E_NOTICE);

// view generation logic

error_reporting(-1);

}

但這似乎并不是最干凈(也不安全)的解決辦法;特別是在視圖中調(diào)用輔助函數(shù)時(shí).我已經(jīng)選擇了一種HMVC方法,并且可以從視圖發(fā)出子請(qǐng)求,因此我需要找到所有的render()轉(zhuǎn)義點(diǎn)并使用error_reporting(-1)保護(hù)它們.

我還有其他選擇嗎?

解決方法:

即使在視圖模板中,“未定義變量”通知也非常有價(jià)值,因?yàn)樗鼈冇兄诎l(fā)現(xiàn)拼寫錯(cuò)誤;但這需要定義控制器中的每個(gè)變量,或檢查它們是否在視圖中設(shè)置.

正如您所注意到的,這兩個(gè)明顯的解決方案存在一些開銷或缺點(diǎn).甚至禁用錯(cuò)誤報(bào)告也會(huì)產(chǎn)生一些開銷,因?yàn)槿匀粫?huì)生成錯(cuò)誤(錯(cuò)誤消息已格式化,內(nèi)部和用戶錯(cuò)誤處理程序被調(diào)用等等;它們只是隱藏).這隱藏了你可以從視圖中調(diào)用的輔助方法的錯(cuò)誤;這對(duì)調(diào)試沒有幫助.

我建議你使用模板引擎.有些生成PHP代碼與手寫代碼一樣快.他們會(huì)為你處理這個(gè)問題,并會(huì)做更多的事情(比如逃避,你的觀點(diǎn)也應(yīng)該充滿htmlspecialchars()調(diào)用;)).

總結(jié)

以上是生活随笔為你收集整理的php通知多有人,PHP通知抑制;只有某些情况/方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。