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