Menu
Coddy logo textTech

Variable Scope

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

関数内で作成された変数は、外部の変数から完全に分離されています。この概念は変数のスコープと呼ばれ、これを理解することでコード内の混乱を招くバグを防ぐことができます。

関数内で定義された変数は、その関数内でのみ存在します。これをローカル変数と呼びます:

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

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

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

同様に、関数外で定義された変数は、関数内では自動的に利用できません:

<?php
$name = "Alice";

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

greet();
?>

メインコードに $name が存在していても、関数はその値を見ることができません。関数内で外部の値を使用するには、それらをパラメータとして渡してください—それがあなたがすでに学んだクリーンで推奨される方法です。

この分離は実際には役立つものです。関数がプログラムの他の部分の変数を誤って変更しないことを意味し、コードをより予測しやすく、デバッグしやすくします。

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

チートシート

関数内で作成された変数はlocal variablesであり、その関数内でのみ存在します。この概念はvariable scopeと呼ばれます。

関数内で定義された変数は、その外側からアクセスできません:

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

sayHi();
echo $message; // Error: $message doesn't exist here
?>

同様に、関数外で定義された変数は、自動的に関数内では利用できません:

<?php
$name = "Alice";

function greet() {
    echo $name; // Error: $name is not defined inside this function
}

greet();
?>

関数内で外部の値を使用するには、パラメータとして渡します。

自分で試してみよう

<?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腕試し

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

基礎のすべてのレッスン