Menu
Coddy logo textTech

変数のスコープ

CoddyのPHPジャーニー「基礎」セクションの一部。レッスン 67/71。

関数内で作成された変数は、その外部にある変数とは完全に別のものです。この概念は variable スコープ と呼ばれ、これを理解することで、コード内の紛らわしいバグを防げます。

variable は function 内で定義されると、その function 内でのみ存在します。これは local variable と呼ばれます:

<?php
function sayHi() {
    $message = "Hello!";
    echo $message;
}

sayHi();
echo $message; // エラー: $message はここでは存在しません
?>

変数 $messagesayHi() の内部で作成され、function が終了すると消えます。外部からアクセスしようとするとエラーが発生します。

同様に、関数の外で定義された変数は、関数内で自動的に利用できるわけではありません。

<?php
$name = "Alice";

function greet() {
    echo $name; // エラー: $name はこの関数内で定義されていません
}

greet();
?>

メインコードに$nameが存在していても、関数からはそれを参照できません。関数内で外部の値を使うには、それらをパラメーターとして渡します。これは、すでに学んだ、クリーンで推奨されるアプローチです。

この分離は実際に役立ちます。これにより、function がプログラムの他の部分にある変数を誤って変更することがなくなり、コードの予測可能性が高まり、デバッグしやすくなります。

challenge icon

チャレンジ

簡単

入力を2行読み取ります:

  1. 人の名前(例:Alice
  2. 整数のボーナス額(例:50

calculateBonusという名前の関数を作成します。この関数は2つのパラメータ、$name(string)と$bonus(int)を受け取ります。

関数の内部で:

  • ローカル変数$baseSalaryを作成し、1000を設定します
  • $baseSalary$bonusを加算して合計の給与を計算します
  • 次の形式の文字列を返します:[name] earns [total]

入力値を使って関数を呼び出し、返された結果を出力します。

例1:

入力がAlice50の場合、出力は次のようになります:

Alice earns 1050

例2:

入力がBob200の場合、出力は次のようになります:

Bob earns 1200

例3:

入力がEmma0の場合、出力は次のようになります:

Emma earns 1000

自分で試してみよう

<?php
// 入力を読み取る
$name = trim(fgets(STDIN));
$bonus = intval(fgets(STDIN));

// TODO: 以下に calculateBonus 関数を作成する
// - $name (string) と $bonus (int) をパラメータとして受け取る必要がある
// - ローカル変数 $baseSalary を作成し 1000 に設定する
// - 合計給与を計算し "[name] earns [total]" を返す



// 関数を呼び出して結果を出力する
echo calculateBonus($name, $bonus);
?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ