2010年6月9日水曜日

PHPのスコープってゆるすぎじゃなかと思った今日この頃

PHPの変数のスコープっておおざっぱに言うと、
  • 変数は関数内ならいつでも何処でも、定義したら以降は有効ですよ
ってな仕様なんですけど、これのおかげでバグが出やすくなってるんじゃないかと思うのは私だけなのでしょうかね?え?おめぇのスキル不足って?イグザクトリー!w
例えば
  1. if ($isSuccess) {  
  2.     $a = 123;  
  3. }  
  4. echo $a;  
これを実行すると「123」が表示されるわけですね。あら便利っ!

そして、今日ほんのりはまったのがこれです
  1. $testArray = Array(  
  2.     0 => Array(1, 2, 3),  
  3.     1 => Array(1, 2, 3)  
  4. );  
  5.   
  6. foreach($testArray as $index => $valueArray) {  
  7.     foreach($valueArray as $value) {  
  8.         $subTotal += $value;  
  9.     }  
  10.     $subTotalArray[$index] = $subTotal;  
  11. }  
  12. print_r($subTotalArray);  
$totalの値が足し込まれ続けておかしな値になってしまいます。
  1. $testArray = Array(  
  2.     0 => Array(1, 2, 3),  
  3.     1 => Array(1, 2, 3)  
  4. );  
  5.   
  6. foreach($testArray as $index => $valueArray) {  
  7.     $subTotal = 0; // ←ここで初期化する  
  8.     foreach($valueArray as $value) {  
  9.         $subTotal += $value;  
  10.     }  
  11.     $subTotalArray[$index] = $subTotal;  
  12. }  
  13. print_r($subTotalArray);  
これが正常なコードです、まあ無精せずに初期化しろってことですね(汗
あ、ちなみにソースは動作テストしていませんので、動かなかったらごめんなさい。

1 件のコメント:

  1. PHPはダメですよね・・。ゴミみたいな言語ですので・・。

    返信削除