本記事では、変数のスコープ(ローカル変数、グローバル変数)について紹介します。
変数のスコープとは
変数のスコープとは、定義した変数が使える範囲のことをいいます。
ローカル変数とは
ローカル変数とは、関数内で定義した変数のことです。
ローカル変数のスコープは変数を宣言した関数内です。そのため、ローカル変数を定義した関数内でしか使用することができません。
※ローカル変数を関数の外で使用するとエラーが発生します。
[ローカル変数の使用例]
<?php
function test( ) {
$a = 1;
print ("ローカル変数aの値:".$a);
}
test( );
?>
[実行結果]
ローカル変数aの値:1
グローバル変数とは
グローバル変数とは、関数の外で定義した変数や、関数内でglobalをつけて定義した変数のことです。
グローバル変数のスコープはPHPスクリプト全体です。
関数内でしか使えないローカル変数とは違い、グローバル変数は関数内外に関わらず使用することができます。
グローバル変数を関数内で使用するときは「global」の宣言を行います。
[global宣言なしの場合]
<?php
$a = 0;
function test( ) {
$a = 0;
$a++;
print ("関数内の変数aの値:" .$a."<br>");
}
test();
print ("関数外の変数aの値:".$a);
?>
[実行結果]
関数内の変数aの値:1
関数外の変数aの値:0
関数外で定義した「$a」と関数内で定義した「$a」は同じ変数名ですが、関数外で定義した「$a」はグローバル変数、関数内で定義した「$a」はローカル変数と判断されて、別の変数として扱われます。
そのため、関数内でグローバル変数を使用するときは「global」の宣言(グローバル変数として扱う)が必要となります。
[global宣言ありの場合]
<?php
$a = 0;
function test( ) {
global $a;
$a++;
print ("[関数内]グローバル変数aの値:".$GLOBALS["a"]."<br>";
}
test( );
print ("[関数外]グローバル変数aの値:".$a);
?>
[実行結果]
[関数内]グローバル変数aの値:1
[関数外]グローバル変数aの値:1
global宣言をすることで、関数外で定義したグローバル変数を関数内で参照することができました。
関数内では「global宣言あり:グローバル変数」「global宣言なし:ローカル変数」として扱います。
スーパーグローバル変数「$GLOBALS」
グローバル変数は、スーパーグローバル変数の「$GLOBALS」を使って表現することもできます。
書き方が違うだけで、globalと同じ意味です。
[$GLOBALSの例]
<?php
$a = 0;
function test( ) {
$GLOBALS['a']++;
print ("[関数内]グローバル変数aの値:".$GLOBALS['a']."<br/>");
}
test( );
print ("[関数外]グローバル変数aの値:".$a);
?>
[実行結果]
[関数内]グローバル変数aの値:1
[関数外]グローバル変数aの値:1
静的(static)変数とは
ローカル変数にstaticをつけると、静的(static)変数に変わります。
ローカル変数と静的変数の違いは、関数の呼び出しごとに値が残るかどうかです。
静的変数の初期化は最初の1回のみ行われて、関数の処理が終わってもその値を失いません。
[ローカル変数と静的変数の例]
<?php
function test( ) {
$a = 0;
static $b = 0;
$a++;
$b++;
print ("ローカル変数aの値=".$a." 静的変数bの値=".$b."<br>");
}
test( );
test( );
?>
[実行結果]
ローカル変数aの値=1 静的変数bの値=1
ローカル変数aの値=1 静的変数bの値=2
ローカル変数は、関数の処理が終わったらその値を失います。そのため「test()」をコールするたびにローカル変数「$a」が作られます。
※実行結果のとおり、常に値は1になります。
それに比べ 静的変数は、関数の処理が終わってもその値を失いません。そのため「test()」を初回にコールしたときに静的変数「$b」の初期化が行われ、2回目以降「test()」をコールしたときは、初期化処理は行われず既に作成されている静的変数「$b」を使用します。
※実行結果のとおり、値は増えていきます。
ローカル変数は、関数をコールするたびに新しく作られ(関数の処理が終わると失います)、静的変数は1度作られたらその値は残り続ける変数です。
ローカル変数、グローバル変数、静的変数について紹介しました。PHPの学習をされている方のお力になれれば幸いです。
学習書の紹介
気づけばプロ並みPHP 改訂版ーーゼロから作れる人になる! [ 谷藤賢一 ] 価格:2,970円 |
いきなりはじめるPHP ワクワク・ドキドキの入門教室 [ 谷藤賢一 ] 価格:1,980円 |