我应该在实时服务器上启用 E_NOTICE 吗?
正如我在为什么要修复 E_NOTICE 错误中看到的那样?
每个人都再次使用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%” 对 1000000 个抑制执行了测试。其中有多少出现在你的代码中,即使你使用 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;
}
所以如果旧属性不存在,我将有 null 并且:
$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']) ...