gpt4 book ai didi

php - 为什么要修复 E_NOTICE 错误?优点和缺点

转载 作者:行者123 更新时间:2023-12-04 18:24:06 27 4
gpt4 key购买 nike

我应该在实时服务器上启用 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

The difference was that suppressing the notice took 100% as long as just checking if it existed first" Test was performed on 1000000 supressions. How many of them appears in your code, even if you use Zend+Doctrine+something else? And how many time does it takes in comparison to DB connections, etc.?



也许我只是不习惯编写正确的代码(现在只使用 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']) ...

最佳答案

例如,当我查看您的代码时

$this->_oldattributes['category_id']

我的第一个想法是,这可能应该是一个类。
class Attributes {
public $categoryId;
// and so on
}

现在的区别是,不需要使用 isset()不再,因为现在该属性存在(可能是 null )或者它绝对是一个错误(“未定义的属性”)并且应该修复。我认为您的大多数情况都是用 isset() “修复”的。 , 属于这种。

关于php - 为什么要修复 E_NOTICE 错误?优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10077164/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com