注意:未定义的变量,但PHP应该';不需要变量定义


Notice: Undefined Variable, but PHP shouldn't require variable definitions?

我在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中?或

    代码从未进入foreach语句,所以$struct没有初始化?

  2. 在foreach之前声明它会解决这个问题吗?我该如何申报?

  3. 不管这个通知,代码真的能工作吗?

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

代码会起作用,但由于没有声明$struct,很可能您犯了一个错误(可能是拼写错误)。PHP通过发送通知来警告您。尽管它在没有声明的情况下确实有效,但建议无论如何都要声明它。

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

虽然在PHP中不需要定义变量,但定义变量是更好的编码实践。