调试未定义的变量,Magento PHP

debugging an undefined variable, Magento PHP

我正在为 magento 使用 "Love Fashion" 主题,但是如果有人以前遇到过与此主题相同的问题,这仅供参考。

我收到以下错误 Notice: Undefined variable: deal。错误发生在第 50 行和第 61 行 - 但是错误在第 50 行出现两次,例如:

Notice: Undefined variable: deal on line 50
Notice: Undefined variable: deal on line 50
Notice: Undefined variable: deal on line 61

以下代码会发生这种情况(从第 49 行开始,到第 67 行结束):

public function addFilter($filterName,$filtervalue,$condition='='){
        if ($deal instanceof Sm_Deal_Model_Deal){
            $deal = $deal->getId();
        }
        if (!$this->_joinedFields){
            $this->joinFields();
        }
         $this->getSelect()->where('deal.'.$filterName.' '.$condition.' ?', $filtervalue);
        return $this;
    }

public function OrderbyAdd($orderName,$ordervalue){
        if ($deal instanceof Sm_Deal_Model_Deal){
            $deal = $deal->getId();
        }
        $this->getSelect()->order('deal.'.$orderName.' '.$ordervalue);

        return $this;
    }

所以我的问题是,在这种情况下我该如何修复未定义的变量?

例如,我在同一文档的前面使用了以下代码,但这并没有给出任何错误:(从第 26 行开始,到第 47 行结束)

public function addDealFilter($deal){
    if ($deal instanceof Sm_Deal_Model_Deal){
        $deal = $deal->getId();
    }
    if (!$this->_joinedFields){
        $this->joinFields();
    }
    $this->getSelect()->where('related.deal_id = ?', $deal);
    return $this;
}

public function joinFieldsdeal(){

        $this->getSelect()->join(
            array('deal' => $this->getTable('deal/deal')),
            'deal.entity_id = related.deal_id',
            array('deal.end_date','deal.start_date','deal.name')
        );
        $this->_joinedFields = true;

    return $this;
}

这个问题不是 "Reference: What is variable scope, which variables are accessible from where and what are “undefined variable” errors?" 的重复问题,因为这只是简单地解释了函数的基本原理 - 这里不是这种情况。

在这两个函数(addFilterOrderbyAdd)中,有问题的代码位在这里

if ($deal instanceof Sm_Deal_Model_Deal){
    $deal = $deal->getId();
}

函数中可用的只有个变量是

  • 函数参数($filterName,$filtervalue,$condition$orderName,$ordervalue),分别。
  • 函数中定义的变量
  • 任何全局变量

变量$deal就是其中的none个。正如错误消息所说,它未定义。子句

if ($deal instanceof Sm_Deal_Model_Deal){
    $deal = $deal->getId();
}

对您的程序没有实际影响。变量 $deal 永远不是 Sm_Deal_Model_Deal 的实例,因为变量 $deal 不存在。 您可以从代码中删除整个 if 子句,并且不会更改系统的行为方式(除了删除那个 Notices

就是说 - 尚不清楚 为什么 此代码首先出现在此处。有人出于某种原因添加了它——或者可能删除了定义 $deal 的每个函数的部分。根据您的主题的干净版本检查这些文件是值得的。