1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fizzbuzz問題 備忘録

Last updated at Posted at 2019-11-18
<?php
    $max = 100;
    for ( $i = 1; $i <= $max; $i++ ){
        print fizzbuzz($i) . PHP_EOL;
    }
    function FizzBuzz ($i) {
            if ( ($i % 3 == 0) && ( $i % 5 == 0) ){
            return 'FizzBuzz';
            }
            elseif ($i % 3 == 0){
            return 'Fizz';
            }
            elseif ($i % 5 == 0){
            return 'Buzz';
            }
            else {
            return $i;
            }
    }
?>

スコープの認識不足でエラー発生↓

<?php
    $max = 100;
    function FizzBuzz ($i){
        for ( $i = 1; $i <= $max; $i++ ){
            if ( ($i % 3 == 0) && ( $i % 5 == 0) ){
            return 'FizzBuzz';
            }
            elseif ($i % 3 == 0){
            return 'Fizz';
            }
            elseif ($i % 5 == 0){
            return 'Buzz';
            }
            else {
            return $i;
            }
            
        }
    }
    
 print FizzBuzz ($i) . PHP_EOL; 
?>

エラーメモ

  • 理由:関数内外における、変数のスコープ(有効範囲)の理解不足
    • $maxは関数外で定義されている変数なので、関数内($i <= $max;)では参照されない。
    • $iは関数内で定義されている変数なので、関数外(print FizzBuzz ($i) . PHP_EOL; )では参照されない。
  • 有効範囲(スコープ)について
    • 変数には有効範囲(スコープ)があるため、範囲が異なると参照することができない。
      • グローバル変数・・・関数外で定義していた変数、プログラムのどこからでも参照可能
      • ローカル変数・・・関数内などで定義されている、有効範囲が限られた変数
    • 関数内で参照できる変数は、関数内で定義された変数のみ。関数外で定義した変数を使おうとしても参照することはできない。
    • 逆に関数内で定義された変数を関数外で使うこともできない。
  • global宣言することで、関数内でローカルではなくグローバル変数を参照するようになる。ただしあまり使わないほうが良い。

参考
ゼロから始めるPHP講座Vol.40 ユーザー定義関数①

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?