PHPにおける変数のスコープ(範囲)について解説しています。
変数は、基本的にPHPのスクリプト内のどこでも宣言することが可能です。しかし、宣言する場所によって、PHPのスクリプト内での変数の可視性の範囲が決定します。変数の可視性の範囲が決まるということは、どこでその変数を使用またはアクセスできるかが決定するということでもあります。
■環境
・Windows10
・WampServer Version 3.2.3 64bit
・PHP Version 7.3.21
■外で変数を宣言し、関数内で宣言された変数を呼び出す
では、まずPHPにおける変数のスコープ(範囲)を理解するために、外で変数を宣言し、関数内で宣言された変数を呼び出してみます。
■コード
<?php
$hello = "こんにちは!";
function test(){
echo $hello;
}
test();
?>
今回はtestという関数を宣言した外で、helloという変数を宣言します。helloという変数には、文字列を格納しておきます。
testという関数では、中括弧”{}”を記述し、その中に実行する処理を記述します。記述する内容は、echo文で、関数内で宣言されたhelloという変数を出力するというものです。
記述後、関数内で宣言された変数を出力するために、関数を呼び出してみます。
■実行
では、このスクリプトを「hello.php」という名前で保存し、実行させてみます。
Notice: Undefined variable: hello in C:\wamp64\www\project\hello.php on line 6
実行してみると、エラーが発生しました。エラーの内容は「未定義の変数」といったものです。つまり、helloという変数は、関数の宣言の外で定義されており、関数内で宣言された変数への操作はできず、関数内で宣言されたhelloという変数の中は空っぽで定義されていないので呼び出すことができず、エラーが発生しているというものです。
■関数内で宣言された変数のみを出力し、関数は呼び出ししない
では、次に関数内で宣言された変数のみを呼び出し、関数は呼び出ししない場合をやってみます。
■コード
<?php
function test(){
$hello = "こんにちは!";
echo $hello;
}
echo $hello;
?>
今度は、関数内でhelloという変数を宣言し、echo文でhelloという変数を出力する処理を記述します。
その後、関数の宣言の外で、echo文を使用し、関数内のhelloという変数を出力してみます。
■実行
では、このスクリプトを「hello.php」という名前で保存し、実行させてみます。
Notice: Undefined variable: hello in C:\wamp64\www\project\hello.php on line 8
実行してみると、エラーが発生しました。こちらも、先ほど同じでエラーの内容は「未定義の変数」といったものです。今回は、関数内でhelloという変数を宣言していますが、helloという変数を外から出力(操作)することはできず、関数の宣言の外には、helloという変数はなく未定義の変数をecho文を使用し出力しようとしていますので、エラーが発生しています。
なお、ローカル変数は、宣言された関数でのみ操作できるため、同じ名前の変数を異なる関数で作り利用することができます。
コメント