有人可以向我解释为什么我在第二个代码片段中获得变量$ subtotal的“注意:未定义变量”但不在第一个代码片段中?他们之间有什么区别?他们是否考虑局部变量?
另外,foreach循环中$ cartKey和$ cartItem的变量类型(Global,Superglobal等等)究竟是什么?为什么我不需要定义/声明它们?
switch( $_SESSION['shippingMethod'] )
{
case "Air":
$shipping = $subtotal * 0.1;
break;
}
和
foreach( $cart as $cartKey => $cartItem )
{
$subtotal += $cartItem['total'];
}
非常感谢您的帮助。
答案 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
来定义这些变量。