-1

どういうわけか、IFの一部で定義された変数は、同じIFの別の部分でアクセスできますか?

元:

if ($a == 1)
{
  $b = "ABC";
}
elseif ($a == 2)
{
 echo $b;
}

関数ではグローバル$variableを使用しますが、IFステートメントではわかりません。

登録ページを段階的に作成しているので、これを尋ねる理由。
つまり、そのIfステートメントを何度もチェックする必要があり、最後のステップで、すべてのIFからすべての変数を収集する必要があります。

4

4 に答える 4

3

あなたがそれらを理解する方法で「グローバル」変数はありません。
すべてのPHP変数は、実行後にすべてのPHPスクリプトで消滅する運命にあります。

リクエスト間で変数を保持するために、いくらかのストレージが必要です。
PHPセッションは良い選択です。

于 2012-04-30T10:51:27.297 に答える
1

PHPのIFステートメントは、関数とは異なり、変数スコープを変更しません。したがって、同じスコープ内にいる限り、IFで行うことはすべてifの外部に表示されます。GLOBALを使用する必要はありません。実際、グローバルスコープはできるだけ使用しないでください。

グローバルステートメントは単に範囲を広げ、PHPが他の方法では隠されているものを「見る」ことができるようにします。ただし、スコープの相互作用は必ずしも明白ではないため、変数のスコープを理解する必要があります。戻って、優れたPHPドキュメントを読むことをお勧めします。カチッと音がする前に、おそらく数回読んで少し実験する必要があります。

コードの問題は、表示していないループ内にない限り、ifステートメントがブランチであり、ブランチの1つだけを実行するため、$bの値が表示されないことです。 。

この例のもう1つの問題は、リンクされたifステートメントを使用していることです。これは、次のように記述した方がはるかに適切です。

switch ($a) {
    case 1:
        $b = "ABC";
        break;
    case 2:
        # $b will ALWAYS be empty unless you set it BEFORE the switch OR
        # you loop back to the switch AFTER $a=1
        echo $b;
        break;
    default:
        echo "i is not equal to 1 or 2";
}

参照: http: //php.net/manual/en/control-structures.switch.php

このフォームは、ケースの数が増えるにつれて、読みやすく、よりシンプルで堅牢になります。

于 2012-05-01T09:37:42.090 に答える
0

$aの値は1つだけです。1の場合は$b= ABCであり、elseifの状態になることはなく、$ aが2の場合は、最初の状態になることはありませんが、そうです。条件の前に$bを定義できます。

$b = "something";
if ($a == 1)
{
  $b = "ABC"; // $b is ABC if $a = 1
}
elseif ($a == 2)
{
 echo $b; // output : something, if $a  = 2
}
于 2012-04-30T10:46:04.140 に答える
-2
$b = Null
if ($a == 1)
{
  $b = "ABC";
}
elseif ($a == 2)
{
 echo $b;
}
于 2012-04-30T10:44:37.250 に答える