.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 13
.
<< Prev
変数の状態判定(NULLとempty)
« INDEX »
PHP 文法編
Next >>
globalキーワード
作成日:2006/05/10

1E.8 変数のスコープ

 基本的に、PHPの変数のスコープは2つしかありません。 グローバルスコープとローカルスコープです。 PHPはレキシカル変数宣言のない(サポートしていない)言語なでのローカル変数スコープの始まりが分かりません。 従って、C言語やPerlと異なり、ブロックレベルやファイルレベルのスコープという概念が存在しません。 PHPの変数のスコープとは、変数が関数の外側にあるか内側にあるかの違いだけです。

1E.8.1 スコープの種類

スコープの種類説明
グローバル変数

関数の外側にある変数はグローバルスコープを持ちます。

関数の内側からグローバル変数をアクセスする第1の方法は、関数の中でglobalキーワードを使ってグローバル変数を宣言する事です。 関数の内側からグローバル変数をアクセスする第2の方法は、スーパーグローバル変数 $GLOBALS を使う方法です。 $GLOBALSは関数の内外を問わずに使用できます。

用例:
$a = 'global';
echo $a;             // 'global'を出力します
echo $GLOBALS['a'];  // 'global'を出力します
foo();

function foo(){
  echo $GLOBALS['a']; // 'global'を出力します
  echo $a;            // 何の出力しません($aはローカル変数です)

  global $a; // $aをグローバル変数宣言します
  echo $a;   // 'global'を出力します
}
ローカル変数

関数の内側にある変数はローカルスコープを持ちます。

用例:
$a = 'global';
foo();

function foo(){
  $a = 'local';
  echo $a;             // 'local'を出力します (ローカル変数)
  echo $GLOBALS['a'];  // 'global'を出力します(グローバル変数)
}
スーパーグローバル変数
(自動グローバル)

スーバーグローバル変数はPHPの定義済み変数で、 関数の内側でもglobal宣言なしで変数にアクセスできます。

用例:
foo();

function foo(){
  echo $_REQUEST['PHPSESSID'];  //セッションIDを表示
  echo $_SERVER['REMOTE_ADDR']; //アクセス元のIPアドレスを表示
}


1E.8.2 ファイルレベルのスコープ

 PHPにファイルレベルのスコープはありません。 変数のスコープは、その変数が現れたコンテキスト(関数の外側か内側か)に依存します。 この規則はincludeやrequireにより読みこまれたスクリプトにも適用されます。 (「スコープの継承」と呼ばれます)

用例:
inc.php
<?php echo $a; ?>

foo.php
<?php
$a = 'global';
include "inc.php";   // 'global'を出力します(inc.phpの$aはグローバル変数です)

foo();

function foo(){
  $a = 'local';
  include "inc.php"; // 'local'を出力します(inc.phpの$aはローカル変数です)
}
?>


1E.8.3 ネストされた関数の変数スコープ

 PHPは関数内に関数(ネストされた関数)を定義する事ができます。 ネストされた関数でも変数のローカルスーコープは保障されます。 例えば、関数foo()の中で関数bar()が定義されている場合、 foo()内の変数$aとbar()内の変数$aは異なった変数になります。

用例:
function foo(){

  function bar(){
    $a = "bar";
    echo $a;  // 'bar'を出力します(aは関数bar()のローカル変数です)
  }

  $a = 'foo';
  bar();
  echo $a;  // 'foo'を出力します($aは関数bar()によって上書きされません)
}
<< Prev
変数の状態判定(NULLとempty)
« INDEX »>
Page Top
Next >>
globalキーワード

.