注意:未定义的变量,但PHP不应该要求变量定义?

时间:2013-11-24 19:50:30

标签: php

我在Magento中有一个扩展,导致system.log中出现错误

错误信息如下。它位于foreach语句

之后的return语句中
 Notice: Undefined variable: struct  

方法是

 public function getFeeList($id)
 {
    //some code here but no statement that contains $struct
    foreach($result2 as $kk=>$vv)
    {
                    $struct[$vv['magikfees_id']]['tax_apply']=$vv['tax_apply'];
                    $struct[$vv['magikfees_id']]['tax_type']=$vv['tax_type'];
      ....
    }
    return $struct;
}

据我所知,您不需要声明PHP变量。所以有一个问题是

  1. 是$ struct变量的范围,在这种情况下仅在foreach中? OR

    代码永远不会进入foreach语句,因此$ struct未初始化?

  2. 在foreach解决此问题之前宣布它?我怎么声明呢?

  3. 无论此通知如何,
  4. 实际工作的代码是什么?

2 个答案:

答案 0 :(得分:0)

您不需要声明PHP变量,但是如果不这样做,您将收到通知。您可以将其声明为$struct = array();

代码可以工作,但由于$struct没有声明,很可能你犯了一个错误(可能是一个错字)。 PHP通过发送通知向您发出警告。虽然没有声明它确实有用,但建议无论如何都要声明它。

答案 1 :(得分:0)

  1. 不,范围是方法getFeeList()。一旦定义了变量,您可以稍后在该特定方法的代码中访问它。如果代码未输入foreach,则变量将为null
  2. 是的,它会删除通知错误。您可以在$struct = array();之前添加foreach来完成此操作。另一种解决方法是从E_NOTICE中的error_reporting设置中删除php.ini,或在代码开头设置ini_set()
  3. 即使您没有定义变量,这段特殊代码也应该正常工作。
  4. 尽管在PHP中您不需要定义变量,但定义它们是一种更好的编码实践。