変数のスコープ
変数の有効範囲の事をスコープ(scope)と言います。PHPの場合、変数を最初に何処で使ったかによって、その変数の有効範囲が決まります。この辺りは、C言語と共通と考えてもらっても結構です。
例えば、以下のようなプログラムの場合、$aはグローバル変数となり、インクルードされたboo.php3の中でも使用可能になります。
<?php $a = 1; include "boo.php3"; ?> しかし一方、以下のようなプログラムの場合、関数内の$aは関数内でのみ有効なローカル変数となり、ここでは何も出力されない事になります。
<?php $a = 1; function test ( ) { print $a; } ?> もし、関数内で関数外の変数を利用する場合は、関数内で使いたい変数をglobalで宣言します。上のプログラムを以下のように修正すれば、ちゃんと「1」を出力するようになります。
<?php $a = 1; function test ( ) { global $a; ←grobalで宣言している。 print $a; } ?> $GLOBALS
関数外の変数を利用する方法は、上に示した方法以外にも、PHPが定義する$GLOBALS配列を使用する方法があります。以下に、そのプログラム例を示します。
<?php $a = 1; function test ( ) { print $GLOBALS["a"]; } ?> これで、ちゃんと「1」を出力するスクリプトになりました。配列$GLOBALSは連想配列になっていて、キー(インデックス)が外部変数名で、その要素が外部変数の値になっています。
static
PHPには、C言語などと同じく、静的(Static)変数があります。では、通常の変数の用法との違いを、具体的に見て行きましょう。
<?php function test ( ) { $a = 0; print $a; $a++; } test ( ); test ( ); ?> 上のスクリプトの場合は、「00」が出力されるだけです。関数test ( )は、$aに0を代入して$aを出力した後、$aを1増やしています。しかし、$aは関数外では参照する事ができない為、結局意味のない命令になっています。
一方、これを以下のようにstatic宣言にすると、ちゃんと「01」と出力するようになります。static宣言にすると、関数test ( )が呼ばれる度に$aの値を出力し、増加させるようになります。
<?php function test ( ) { static $a = 0; ←static宣言に替えた。 print $a; $a++; } test ( ); test ( ); ?> 静的変数は、再帰関数を作る際によく利用されます。再帰関数とは、自分自身を関数内で呼び出す関数です。再帰関数を作る場合、無限に呼び出すような関数になる可能性もありますので、十分注意が必要です。
ユーザ定義関数 前へ
次へ クラスとオブジェクト