PHPの変数の
スコープっておおざっぱに言うと、
- 変数は関数内ならいつでも何処でも、定義したら以降は有効ですよ
ってな仕様なんですけど、これのおかげでバグが出やすくなってるんじゃないかと思うのは私だけなのでしょうかね?え?おめぇのスキル不足って?イグザクトリー!w
例えば
- if ($isSuccess) {
- $a = 123;
- }
- echo $a;
if ($isSuccess) {
$a = 123;
}
echo $a;
これを実行すると「123」が表示されるわけですね。あら便利っ!
そして、今日ほんのりはまったのがこれです
- $testArray = Array(
- 0 => Array(1, 2, 3),
- 1 => Array(1, 2, 3)
- );
-
- foreach($testArray as $index => $valueArray) {
- foreach($valueArray as $value) {
- $subTotal += $value;
- }
- $subTotalArray[$index] = $subTotal;
- }
- print_r($subTotalArray);
$testArray = Array(
0 => Array(1, 2, 3),
1 => Array(1, 2, 3)
);
foreach($testArray as $index => $valueArray) {
foreach($valueArray as $value) {
$subTotal += $value;
}
$subTotalArray[$index] = $subTotal;
}
print_r($subTotalArray);
$totalの値が足し込まれ続けておかしな値になってしまいます。
- $testArray = Array(
- 0 => Array(1, 2, 3),
- 1 => Array(1, 2, 3)
- );
-
- foreach($testArray as $index => $valueArray) {
- $subTotal = 0;
- foreach($valueArray as $value) {
- $subTotal += $value;
- }
- $subTotalArray[$index] = $subTotal;
- }
- print_r($subTotalArray);
$testArray = Array(
0 => Array(1, 2, 3),
1 => Array(1, 2, 3)
);
foreach($testArray as $index => $valueArray) {
$subTotal = 0; // ←ここで初期化する
foreach($valueArray as $value) {
$subTotal += $value;
}
$subTotalArray[$index] = $subTotal;
}
print_r($subTotalArray);
これが正常なコードです、まあ無精せずに初期化しろってことですね(汗
あ、ちなみにソースは動作テストしていませんので、動かなかったらごめんなさい。
PHPはダメですよね・・。ゴミみたいな言語ですので・・。
返信削除