1

2番目のコードスニペットでは変数$subtotalに対して「通知:未定義の変数」が表示されるが、1番目のコードスニペットでは表示されない理由を誰かに説明してもらえますか?それらの違いは何ですか?彼らはローカル変数を考慮していますか?

また、foreachループの$cartKeyと$cartItemの変数タイプ(グローバル、スーパーグローバルなど)は正確には何ですか?なぜ私はそれらを定義/宣言する必要がなかったのですか?

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

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

助けてくれてありがとう。

4

2 に答える 2

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)ます。これは、長期的に学習するのに役立ちます。いくつかのNoticeUndefinedメッセージが表示されたら、変数のコーディングとチェックの方法を変更します。次に、スクリプトをリリースする準備ができたらE_ALL0

于 2012-04-25T17:46:31.337 に答える
3

ループ$subtotalがあるエリアにはまだ存在していません。使用し+=ているので、基本的に次のように言っているため、このエラーが発生します。

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

の場合、$cartKeyおよびそれら$cartItemを定義しました...これらは、配列アイテムの現在のキーと値から作成するループ構造の一部です。つまり、配列から現​​在のスコープに「コピー」します。例えば。$cartKey => $cartItemそれらの変数を定義しました。

于 2012-04-25T17:49:34.670 に答える