fizzbuzz問題 備忘録
<?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宣言することで、関数内でローカルではなくグローバル変数を参照するようになる。ただしあまり使わないほうが良い。
Author And Source
この問題について(fizzbuzz問題 備忘録), 我々は、より多くの情報をここで見つけました https://qiita.com/gaju_333/items/1708d2022b7e4f530136著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .