我应该在实时服务器上启用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%“ 测试是在1000000次压力下进行的。即使你使用Zend + Doctrine +其他东西,你的代码中会出现多少个?与DB连接等相比需要多少时间?
也许我只是不习惯编写正确的代码(现在只使用PHP很长时间)。
对于上下文,我们将项目移动到显示E_NOTICEs的服务器,这就是我问这个问题的原因。我不知道为什么这是关闭它们的大问题?
另一个例子:
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']) ...
答案 0 :(得分:3)
当我查看您的代码时,例如
$this->_oldattributes['category_id']
我的第一个想法是,这可能应该是一个班级。
class Attributes {
public $categoryId;
// and so on
}
现在的区别是,不再需要使用isset()
,因为现在属性存在(可能是null
)或者它是一个bug(“未定义的属性”)并且应该固定。我认为你用isset()
“修复”的大多数情况属于这种情况。
答案 1 :(得分:1)
调试代码时,如果未定义应定义的变量,则可以使用未定义的变量消息。 我认为在使用之前定义变量是一个好习惯,据我所知,其他语言比PHP更严格。