“注意:未定义的变量”错误和foreach循环

时间:2012-04-25 17:43:45

标签: php

有人可以向我解释为什么我在第二个代码片段中获得变量$ subtotal的“注意:未定义变量”但不在第一个代码片段中?他们之间有什么区别?他们是否考虑局部变量?

另外,foreach循环中$ cartKey和$ cartItem的变量类型(Global,Superglobal等等)究竟是什么?为什么我不需要定义/声明它们?

switch( $_SESSION['shippingMethod'] )
{
  case "Air": 
             $shipping = $subtotal * 0.1;
             break;
}

foreach( $cart as $cartKey => $cartItem )
{
    $subtotal += $cartItem['total'];
}

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

基本上错误是在您设置之前使用$subtotal变量,或者在您设置之前将其增加值:

$subtotal=0;
foreach( $cart as $cartKey => $cartItem )
{
    $subtotal += $cartItem['total'];
}

编辑:如果设置$subtotal可能是由于某些其他代码设置了它或未设置,那么应该进行检查,或者您应该在脚本的开头设置它:

$subtotal=(isset($subtotal))?$subtotal:0;
foreach( $cart as $cartKey => $cartItem )
{
    $subtotal += $cartItem['total'];
}

在开发任何脚本时,让error_reporting(E_ALL)为您提供代码中的每个错误总是一个好主意,它可以帮助您从长远来看。一旦看到一些通知未定义的消息,您就会改变编码方式。检查变量。然后,当脚本准备发布时,请将E_ALL转为0

答案 1 :(得分:3)

显然$subtotal在循环所在的区域中不存在。由于您使用的是+=,因此您会收到此错误,因为您实际上是在说:

$subtotal = $subtotal + $cartItem['total']

$cartKey$cartItem的情况下你做了来定义它们......它们是你从当前键和值创建它们的循环结构的一部分数组项 - 将它们“复制”到数组中的当前范围。例如。通过$cartKey => $cartItem来定义这些变量。