Php &引用;注意:未定义变量";错误和foreach循环

Php &引用;注意:未定义变量";错误和foreach循环,php,Php,有人能解释一下为什么在第二个代码段中变量$subtotal得到“Notice:Undefined variable”,而在第一个代码段中没有?他们之间有什么区别?它们是考虑局部变量吗?< /P> 另外,foreach循环中$cartKey和$cartItem的变量类型(全局、超全局..等)到底是什么?为什么我不需要定义/声明它们 switch( $_SESSION['shippingMethod'] ) { case "Air": $shipping = $sub

有人能解释一下为什么在第二个代码段中变量$subtotal得到“Notice:Undefined variable”,而在第一个代码段中没有?他们之间有什么区别?它们是考虑局部变量吗?< /P> 另外,foreach循环中$cartKey和$cartItem的变量类型(全局、超全局..等)到底是什么?为什么我不需要定义/声明它们

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


非常感谢您的帮助。

基本上,错误是在设置变量之前使用
$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\u reporting(E\u ALL)
为您提供代码中的每个错误,这有助于您长期学习。一旦你看到一些未定义的消息,你就会改变编码和检查变量的方式。然后,当脚本准备发布时,将
E_ALL
转到
0

基本上错误是在设置变量之前使用
$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\u reporting(E\u ALL)
为您提供代码中的每个错误,这有助于您长期学习。一旦你看到一些未定义的消息,你就会改变编码和检查变量的方式。然后,当脚本准备好发布时,将
E_ALL
转到
0
显然
$subtotal
在循环所在的区域中还不存在。由于您使用的是
+=
,因此会出现此错误,因为您实际上是在说:

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

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

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

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


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

尝试
$subtotal=$subtotal+$cartItem['total']@mgraph分配这样的值将导致内存不足leak@mgraph,我得到了同样的错误,但感谢您的帮助:)尝试
$subtotal=$subtotal+$cartItem['total']@mgraph分配这样的值将导致内存不足leak@mgraph,我得到了同样的错误,但是谢谢你的帮助:)我不确定这在他的代码中是不是一个好主意。在我看来,他应该期望现在就定义
$subtotal
。这个解决方案是正确的,但我认为它可能在他进入这个循环之前很久就已经存在了。当然,如果没有看到他的全部代码,我们就无法确定:-)我明白了。因此,在第一个代码段的情况下,如果我从未定义/声明过它,它只会将其视为$0?@prodigitalson,这实际上是我教授的示例代码:)我只是想理解它。@Dino55您应该向您的教授指出如何使用未定义的变量,您可能会得到额外的分数;pIm不确定在他的代码中这是一个好主意。在我看来,他应该期望现在就定义
$subtotal
。这个解决方案是正确的,但我认为它可能在他进入这个循环之前很久就已经存在了。当然,如果没有看到他的全部代码,我们就无法确定:-)我明白了。因此,在第一个代码段的情况下,如果我从未定义/声明过它,它只会将其视为$0?@prodigitalson,这实际上是我教授的示例代码:)我只是想理解它。@Dino55您应该向您的教授指出如何使用未定义的变量,您可能会得到额外的分数;p非常感谢您向我解释$cartkey和$cartItem。我想我现在更明白了。我习惯于在使用变量之前声明它,所以如果我遗漏了什么,我会感到困惑。谢谢!:)另一个问题,我如何在另一个网页上访问这两个变量?它们会保存在$cart数组中吗?不,它们几乎是临时的。。。。当循环完成时,这些变量的最后一个值是什么,都将在代码的其余部分保持相同的范围,但此时您不应该信任使用它们。非常感谢您向我解释$cartkey和$cartItem。我想我现在更明白了。我习惯于在使用变量之前声明它,所以如果我遗漏了什么,我会感到困惑。谢谢!:)另一个问题,我如何在另一个网页上访问这两个变量?它们会保存在$cart数组中吗?不,它们几乎是临时的。。。。当循环结束时,不管这些变量的最后一个值是什么,它们都将在代码的其余部分保持相同的作用域,但此时您不应该信任使用它们。