0

これがその方法ではないことはわかっていますが、条件ステートメントを使用して変数を設定しようとすると問題が発生します。

あるコンテキストでは$foo$foo_1$foo_2は、フォーム フィールドが設定されているかどうかを確認し、設定されている場合は、$bar各条件に付随する計算に等しく設定します。

if(isset($foo)) {
    $bar = ($baz * 52) * ($qux);
} 

if(isset($foo_1)) {
    $bar = ($baz_1 * 12) * ($qux);
}

if(isset($foo_2)) {
    $bar = ($baz_2 * $qux);
}

これは、既存のコードが計算で $bar を使用しているためです。

$a = ($b / $bar)

そして$a、さまざまなケースでさらに下に渡されます。

このままでは、最初の条件のみが正常に$foo通過し、他のすべての条件 $bar は NULL として出力されます。$bar

編集:上記のコード(間違っていた)を明確にし、以下の例を更新するには:

$foo = isset($form['first'] ? $form['first'] : '';
$foo_1 = isset($form['second'] ? $form['second'] : '';
$foo_2 = isset($form['third'] ? $form['third'] : '';
if(isset($foo)) {
    $bar = ($foo * 52) * $qux;
} 

if(isset($foo_1)) {
    $bar = ($foo_1 * 12) * $qux;
}

if(isset($foo_2)) {
    $bar = $foo_2 * $qux;
}

Revent、Oswald、および RoyalBG の提案は、私のコードが変数を適切に設定していないことを指摘しています。$baz$baz_1$baz_2は非推奨で存在せず、 、 に置き換えられ、$foo目的の入力の条件を伴いました。これを片付けたら、上で書いたものの代わりに switch ステートメントを使用します。以下のコメントはすべて非常に役に立ちました。助けてくれてありがとう。$foo_1$foo_2

4

4 に答える 4

1

$foo_1設定されることはあり$foo_2ません。そのため、設定されていない場合$foo$bar設定されません。

于 2013-03-28T21:24:42.577 に答える
0

$baz_1 変数の状態と初期化されている場所がわからないため、コードをもっと明確にしてください。

$foo_1 を $qux で乗算する必要があるとロジックが言うように、$baz_1,$baz_2 変数の意味がわかりません

次に、$foo_1、$foo_2 をテストしている場合は、設定されていない可能性のある新しい変数ではなく、テストされた変数に基づいて計算を行う必要があります。

$foo、$foo_1、$foo_2 が設定されているが、$baz、$baz_1、$baz_2 が設定されていない場合、$baz 変数の操作が見られない場合は、状況を明確にしてください。

于 2013-03-28T21:26:59.470 に答える
0

条件のコードが PHP エンジンに渡されない場合、変数を設定するように要求すると、設定されていない可能性が高くなります... switch/case ブロックを試すこともできます

于 2013-03-28T21:32:02.967 に答える
0

Oswald と Royal Bg は、変数が設定されない可能性が高いという点で正しいです。このようにコードを書きます ($baz 変数と $qux 変数にゼロの値を許可すると仮定します):

$bar = 0;   // initialize the variable so it won't be null
if(isset($foo) && isset($baz) && isset($qux)) {
  $bar = ($baz * 52) * ($qux);
} 
else if(isset($foo_1) && isset($ba_1z) && isset($qux)) {
  $bar = ($baz_1 * 12) * ($qux);
}
else if(isset($foo_2) && isset($baz_2) && isset($qux)) {
  $bar = ($baz_2 * $qux);
}

次に、empty() 関数を使用して $bar の値を確認できます。この関数は、値が null、ゼロ、または空の文字列の場合に true を返します。

于 2013-03-28T21:47:12.257 に答える