変数のスコープ

 変数の有効範囲の事をスコープ(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 ( );  
?>  

 静的変数は、再帰関数を作る際によく利用されます。再帰関数とは、自分自身を関数内で呼び出す関数です。再帰関数を作る場合、無限に呼び出すような関数になる可能性もありますので、十分注意が必要です。

ユーザ定義関数 前へ

HOME

次へ クラスとオブジェクト