新しいブログに移動しました。
9ensanのLifeHack
こちらの記事も必要に応じて新しいブログに移動させる予定です。
今後ともよろしくお願い致します。

HOME > PHP > 

PHP入門 第16回 スコープ

PHP入門 第16回 スコープ

  • 2009.02.14 (土) 11:45
  • PHP

特定の変数が参照できる範囲を、「スコープ」といいます。

PHPには、

  1. グローバル
  2. 関数
  3. クラス

の3つのスコープが利用できます。

スコープ名 説明
グローバルスコープ グローバル変数が参照できるスコープ
関数スコープ 関数内のスコープ
クラススコープ クラス内のスコープ

 関数および、クラススコープは、関数またはクラスごとに独立しています。

関数やクラスのメソッドで定義された変数はローカル変数と呼ばれ、他のスコープからローカル変数を参照することはできません。

PHPのグローバルスコープ変数は、オートグローバルと呼ばれる変数(後述)を除き、関数およびクラススコープから直接参照できません。

グローバルスコープ変数は、関数などからはglobal文を使用してグローバル変数であることを宣言した後に使用できるようになります。
そうしないと、グローバル変数とは別のローカル変数として宣言されたことになるので注意が必要です。

PHPのグローバル変数は、$GLOBALSという配列に格納されています。
$GLOBALSは、、どのスコープからでも参照可能なオートグローバル変数の一つです。

globalキーワード

変数宣言時にglobalを宣言することで、関数、クラス内でローカル変数でなくグローバル変数を参照できるようになります。

例)
下記、例では「3」を出力します。global宣言がない場合との違いを確かめてみましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$a = 1;
$b = 2;
 
function Sum()
{
    global $a, $b;
 
    $b = $a + $b;
}
 
Sum();
echo $b;
?>

出力結果)

global宣言を行った場合の出力結果

global宣言を行わない例)
グローバル宣言を行わない場合は、ローカル変数として宣言されグローバル変数の値には変化はありません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$a = 1;
$b = 2;
 
function Sum()
{
    $a;
    $b;
 
    $b = $a + $b;
}
 
Sum();
echo $b;
?>

出力結果)

グローバル宣言を行わなかった場合の出力結果

グローバル変数とローカル変数の関係を調べた例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<pre>
<?php
$var = "グローバル変数\r\n";
 
function test() {
	echo $var; //未定義のローカル変数
	$var = "test関数のローカル変数\r\n"; //test()のローカル変数
	echo $var; //test関数のローカル変数と出力
 
	echo $GLOBALS["var"]; //オートグローバル変数の$GLOBALS配列から
			      //グローバル変数$varを参照
	global $var; //グローバル変数の$varを宣言
	echo $var;   //グローバル変数を出力
}
test();
?>
</pre>

 出力結果)

グローバル変数とローカル変数のテスト

 オートグローバル変数

オートグローバル変数には以下の種類があります。
使えるようにしておきましょう。

変数名 説明
 $GLOBALS  グローバル変数用の配列
 $_GET  HTTPリクエストのGETで送信されてきたクエリー文字列をパースし値を保存した配列
 $_POST  HTTPリクエストのPOSTで送信されたフォームの値を保持した配列
 $_COOKIE  COOKIEの値を保持した配列
 $_FILES  HTTPファイルアップロード用の配列
<input type="file">にてファイルアップロードを行った場合に使用
 $_REQUEST  $_GET,$_POST,$_COOKIEの値を保持した配列
 $_SERVER  Webサーバーに関する情報を保持した配列
 $_ENV  環境変数を保持した配列
 $_SESSION  HTTPセッション情報を保持した配列

 

コメント:0件

コメント投稿フォーム
コメントを入力して下さい。
ユーザー名(必須)
メールアドレス(必須)(非公開)
ホームページ
コメント

トラックバック:1件

  1. [...] 第16回 スコープ [...]

この記事のトラックバックURL
http://blog.veryposi.info/programing/php/php-guide-16/trackback/
お薦めのレンタルサーバー
広告
お薦めの書籍
HOME > PHP > 

PHP入門 第16回 スコープ