Variable Scope
CoddyのPHPジャーニー「基礎」セクションの一部 — レッスン 67/71。
関数内で作成された変数は、外部の変数から完全に分離されています。この概念は変数のスコープと呼ばれ、これを理解することでコード内の混乱を招くバグを防ぐことができます。
関数内で定義された変数は、その関数内でのみ存在します。これをローカル変数と呼びます:
<?php
function sayHi() {
$message = "Hello!";
echo $message;
}
sayHi();
echo $message; // エラー: $message はここでは存在しません
?>変数 $message は sayHi() 内で作成され、関数が終了すると消えます。外側からアクセスしようとするとエラーが発生します。
同様に、関数外で定義された変数は、関数内では自動的に利用できません:
<?php
$name = "Alice";
function greet() {
echo $name; // エラー: $name はこの関数内で定義されていません
}
greet();
?>メインコードに $name が存在していても、関数はその値を見ることができません。関数内で外部の値を使用するには、それらをパラメータとして渡してください—それがあなたがすでに学んだクリーンで推奨される方法です。
この分離は実際には役立つものです。関数がプログラムの他の部分の変数を誤って変更しないことを意味し、コードをより予測しやすく、デバッグしやすくします。
チャレンジ
簡単2 行の入力を読み込みます:
- 人の名前(例:
Alice) - ボーナスの金額を整数として(例:
50)
calculateBonus という名前の関数を作成し、2 つのパラメータを受け取ります: $name (string) と $bonus (int)。
関数内で:
- ローカル変数
$baseSalaryを作成し、1000に設定します $baseSalaryと$bonusを加算して総支給額を計算します- 形式の文字列を返します:
[name] earns [total]
入力値で関数を呼び出し、返された結果を出力します。
例 1:
入力が Alice と 50 の場合、出力は次のようになります:
Alice earns 1050例 2:
入力が Bob と 200 の場合、出力は次のようになります:
Bob earns 1200例 3:
入力が Emma と 0 の場合、出力は次のようになります:
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);
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Comparison & Logical Operators
Comparison OperatorsEquality & IdentityLogical Operators Part 1Logical Operators Part 2Recap - Simple Logic2Variables and Data Types
NumbersStrings and QuotesBooleansNaming ConventionsRecap - Variable InitEmpty VariablesString ConcatenationGetting User InputCast to Different Types3Basic Operators
Arithmetic OperatorsModulo OperatorExponentiation OperatorCombined AssignmentIncrement/DecrementOperator PrecedenceRecap - Simple CalculationsString Operators