2015-04-28 91 views
0

我对magento使用的主题是“Love Fashion”,但是这仅仅是为了解如果有人遇到过与此主题相同的问题之前的信息。调试一个未定义的变量,Magento PHP

我收到以下错误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?"的重复,因为这只是解释了函数的基础 - 在这里并不是这样。

+1

[参考:什么是变量作用域,哪些变量可以从哪里访问,什么是“未定义变量”错误?](http://stackoverflow.com/questions/16959576/reference-what-is-variable -scope-which-variables-are-accessible-from-where-and) – IMSoP

+0

嗨IMSoP - 它可能是同样的问题,但你链接到的问题,只定义了函数的基础,我已经知道了。我上面列出的代码,我不明白范围,因为这不是我清楚,因为你连接的范围。 – Patrick

+1

考虑到在相关答案中解释的范围规则,您认为'$ deal'将来自通知中突出显示的行吗? – IMSoP

回答

1

在这两种的那些功能(addFilterOrderbyAdd),问题的代码位是这里

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

在一个函数的可用变量是

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

可变$deal是没有这些变量。正如错误信息所说,它没有被定义。条款

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

对您的程序没有实际影响。变量$deal从不是Sm_Deal_Model_Deal的实例,因为变量$deal不存在。 您可以从代码中删除,如果从句的整个,你会不会改变你的系统的行为(除了删除Notices

这就是说 - 现在还不清楚为什么代码是这里的第一地点。有人添加它是有原因的 - 或者可能删除了定义$deal的每个函数的部分。这是值得检查这些文件对干净版本的主题。