Php &引用;注意:未定义变量";错误和foreach循环
有人能解释一下为什么在第二个代码段中变量$subtotal得到“Notice:Undefined variable”,而在第一个代码段中没有?他们之间有什么区别?它们是考虑局部变量吗?< /P> 另外,foreach循环中$cartKey和$cartItem的变量类型(全局、超全局..等)到底是什么?为什么我不需要定义/声明它们Php &引用;注意:未定义变量";错误和foreach循环,php,Php,有人能解释一下为什么在第二个代码段中变量$subtotal得到“Notice:Undefined variable”,而在第一个代码段中没有?他们之间有什么区别?它们是考虑局部变量吗?< /P> 另外,foreach循环中$cartKey和$cartItem的变量类型(全局、超全局..等)到底是什么?为什么我不需要定义/声明它们 switch( $_SESSION['shippingMethod'] ) { case "Air": $shipping = $sub
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数组中吗?不,它们几乎是临时的。。。。当循环结束时,不管这些变量的最后一个值是什么,它们都将在代码的其余部分保持相同的作用域,但此时您不应该信任使用它们。