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

Din*_*o55 1 php

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

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

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

foreach( $cart as $cartKey => $cartItem )
{
    $subtotal += $cartItem['total'];
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你的帮助.

Law*_*one 7

基本上错误是$subtotal在设置之前说明你的使用变量,或者在你的情况下你在设置它之前增加一个值:

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

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

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

在开发任何脚本时,总是一个好主意,必须error_reporting(E_ALL)在代码中给出每个错误,这有助于您从长远来看.一旦看到一些通知未定义的消息,您就会改变编码和检查变量的方式.然后,当脚本准备好发布转E_ALL0