我應該在實時服務器上啓用E_NOTICE嗎?我爲什麼要修復E_NOTICE錯誤?優點和缺點
正如我在Why should I fix E_NOTICE errors? 中看到的,大家都再次使用isset()
來省略通知。我已經讀過專業人士,但代碼可讀性如何?
讓我們來看看一些代碼:
if ($this->_oldattributes['category_id'] != $tattr['category_id']
|| $this->_oldattributes['deal_id'] != $tattr['deal_id']
) {
清除明白我想在這裏,對不對?
讓我們添加isset()
省略通知:
$old_cat_id = isset($this->_oldattributes['category_id']) ? $this->_oldattributes['category_id'] : null;
$new_cat_id = isset($tattr['category_id']) ? $tattr['category_id'] : null;
$old_deal_id = isset($this->_oldattributes['deal_id']) ? $this->_oldattributes['deal_id'] : null;
$new_deal_id = isset($tattr['deal_id']) ? $tattr['deal_id'] : null;
if ($old_cat_id != $new_cat_id || $old_deal_id != $new_deal_id) {
不壞,但現在我需要更多的時間去了解這裏發生了什麼。
有關調試的一些細節 - 我從來沒有浪費一天的時間來調試由未初始化的變量引起的錯誤。是的,也許有一個半小時的時間浪費在滑入類/函數中,但與丟失代碼可讀性相比,這不是一大浪費?
關於性能的幾個位 - http://seanmonstar.com/post/909029460/php-error-suppression-performance
不同的是,抑制通知了100%,只要剛剛檢查,如果它首先存在」 測試在百萬supressions執行出現他們中有多少在你的代碼中,即使你使用Zend + Doctrine +還有其他的東西?和數據庫連接等需要多少時間?
也許我只是不習慣寫正確的代碼(只用PHP很長一段時間)
對於上下文,我們已經將我們的項目移到了顯示E_NOTICE的服務器上,這就是爲什麼我要問這個問題。我不知道爲什麼這是將它們關閉的一個大問題?
又如:
class Item extends CActiveRecord {
private $_oldattributes = array();
public function afterFind()
{
// Save old values
$this->_oldattributes = $this->getAttributes();
$this->_oldcategory = $this->category;
$this->_olddeal = $this->deal;
}
,所以我會爲空,如果舊的屬性不存在 和:
$tattr = $this->getAttributes();
$this->_oldattributes['category_id'] != $tattr['category_id']
,這將給我我需要什麼,並沒有錯誤,對吧?
同樣沒有對象錯誤,在Yii中當我建立了關係時,有些對象可能不會被初始化,是的,有一種錯誤,因爲有空值並且在這種情況下沒有被初始化有時是真正的錯誤:
$this->deal->item->id != $this->_olddeal->item->id
這可能會觸發通知,但按照預期將工作,讓你忽略了通知:
if ($_GET['foo']) ...
的問題是,我不能忽視這一點,因爲它仍然通知 每一次罰球當我使用這個時,我必須寫:
if (isset($_GET['foo']) && $_GET['foo']) ...
或:
if (@$_GET['foo']) ...
是的,這是已經發生,我需要現在修復我所有的通知:)但我不明白爲什麼我不能關閉它? – llamerr 2012-04-09 17:36:48
對編輯正確的意見 – llamerr 2012-04-09 17:37:09
你應該修復E_NOTICE *錯誤*如果他們實際上是錯誤。 (例如,單詞而不是常量,未聲明的變量被Zend運行時處理得相當好,因爲這是它的存在理由)。用'isset()'語法抑制通知並不比使用'@()'語言內建更聰明。如果整個推理是[微型優化](http://qkme.me/35ksv1),則更不明智。 – mario 2012-04-09 17:38:42