カテゴリ: PHP 更新日: 2025/05/29

PHP の関数のスコープを完全解説!ローカル変数とグローバル変数の違いとは?

PHP の関数のスコープ(ローカル変数とグローバル変数)
PHP の関数のスコープ(ローカル変数とグローバル変数)

新人と先輩の会話形式で理解しよう

新人

「PHP の変数って、どこでも使えるんですか?」

先輩

「いい質問だね!変数には使える範囲、つまり スコープ という概念があるんだ。」

新人

「スコープ? それってどういうことですか?」

先輩

「スコープには、大きく分けて ローカル変数グローバル変数 があるんだよ。まずはローカル変数から説明しよう!」

-

1. 変数のスコープとは?

1. 変数のスコープとは?
1. 変数のスコープとは?

PHP の変数は、定義された場所によって「どこで使用できるか」が決まります。これを スコープ(有効範囲)と呼びます。

PHP では主に次の 2 種類のスコープがあります。

  • ローカルスコープ(関数の中で定義された変数)
  • グローバルスコープ(関数の外で定義された変数)

まずはローカルスコープについて詳しく見ていきましょう。

2. PHP のローカル変数とは?

2. PHP のローカル変数とは?
2. PHP のローカル変数とは?

ローカル変数は 関数の中で定義され、その関数の中だけで使える変数 のことです。関数の外からはアクセスできません。

例えば、以下のコードを見てみましょう。


<?php
function myFunction() {
    $localVar = "私はローカル変数です"; 
    echo $localVar; // 正常に出力される
}

myFunction();
echo $localVar; // エラー!関数の外では使えない
?>

このコードを実行すると、次のような結果になります。


私はローカル変数です
Fatal error: Uncaught Error: Undefined variable $localVar

関数内では $localVar が正常に出力されますが、関数の外では使えないため、エラーが発生します。

3. ローカル変数の特徴

ローカル変数には、次のような特徴があります。

  • 関数の中で定義される。
  • 関数の外では使えない。
  • 関数が実行されるたびに新しい変数として扱われる。

では次に、グローバル変数について説明します!

3. PHP のグローバル変数とは?

3. PHP のグローバル変数とは?
3. PHP のグローバル変数とは?

グローバル変数とは、関数の外で定義され、スクリプト全体で利用できる変数のことです。通常、関数の外で定義された変数は、関数内では直接アクセスできません。

例えば、以下のコードを見てみましょう。


<?php
$globalVar = "私はグローバル変数です";

function myFunction() {
    echo $globalVar; // エラーが発生する
}

myFunction();
?>

このコードを実行すると、次のようなエラーが発生します。


Fatal error: Uncaught Error: Undefined variable $globalVar

このエラーは、関数内からグローバル変数 $globalVar に直接アクセスできないために発生します。PHP では関数内でグローバル変数を使うには、特別な方法が必要です。

4. PHP でグローバル変数を関数内で使う方法

4. PHP でグローバル変数を関数内で使う方法
4. PHP でグローバル変数を関数内で使う方法

関数内でグローバル変数を使う方法として、以下の 2 つの方法があります。

  • global キーワードを使う
  • $GLOBALS 配列を使う

1. global キーワードを使う

global キーワードを使うと、関数内でグローバル変数にアクセスできます。


<?php
$globalVar = "私はグローバル変数です";

function myFunction() {
    global $globalVar;
    echo $globalVar; // 正常に出力される
}

myFunction();
?>

このコードを実行すると、次のように表示されます。


私はグローバル変数です

global $globalVar; を関数内で宣言することで、グローバル変数にアクセスできるようになります。

2. $GLOBALS 配列を使う

$GLOBALS 配列を使うと、関数内からグローバル変数にアクセスできます。$GLOBALS はスーパーグローバル変数で、すべてのスクリプト内で利用可能です。


<?php
$globalVar = "私はグローバル変数です";

function myFunction() {
    echo $GLOBALS['globalVar']; // 正常に出力される
}

myFunction();
?>

このコードを実行すると、次のように表示されます。


私はグローバル変数です

$GLOBALS['変数名'] を使うことで、関数内からグローバル変数にアクセスできます。

-

5. PHP の関数とスコープの違い

5. PHP の関数とスコープの違い
5. PHP の関数とスコープの違い

ローカル変数とグローバル変数の違いについて、もう一度整理しましょう。

変数の種類 定義場所 使用可能な範囲
ローカル変数 関数の中 関数の中のみ
グローバル変数 関数の外 関数の外のみ(global$GLOBALS を使えば関数内でも可)

また、関数のスコープに関して注意すべき点がいくつかあります。

  • 関数内で定義された変数は、関数が実行されるたびに新しく作成される。
  • グローバル変数はプログラム全体で共有されるため、不適切に使用すると意図しないバグを引き起こす可能性がある。
  • 関数の引数を使えば、グローバル変数を関数に渡すこともできる。

関数の引数を使ってデータを渡す方法

関数のスコープを適切に管理するためには、グローバル変数を直接使うのではなく、関数の引数 を利用するのが良い方法です。


<?php
$globalVar = "私はグローバル変数です";

function myFunction($var) {
    echo $var; // 関数の引数を利用する
}

myFunction($globalVar);
?>

このコードを実行すると、次のように表示されます。


私はグローバル変数です

関数の引数を利用すると、グローバル変数を直接参照することなくデータを受け渡すことができ、スコープの管理がしやすくなります。

6. 静的変数(static 変数)とは?

6. 静的変数(static 変数)とは?
6. 静的変数(static 変数)とは?

PHP では、関数が実行されるたびにローカル変数は新しく作成され、前回の値は失われます。しかし、static キーワードを使うことで、関数の呼び出しをまたいでも変数の値を保持できます。

例えば、以下のコードを見てみましょう。


<?php
function counter() {
    static $count = 0;
    $count++;
    echo "現在のカウント: $count<br>";
}

counter();
counter();
counter();
?>

このコードを実行すると、次のような結果になります。


現在のカウント: 1
現在のカウント: 2
現在のカウント: 3

通常のローカル変数を使った場合は、関数を呼び出すたびに値がリセットされますが、static を使うことで値が保持され、カウントが増えていくのがわかります。

静的変数の特徴:

  • 関数の外部からはアクセスできない(ローカルスコープを持つ)
  • 関数が呼ばれるたびに値が保持される
  • プログラムの実行が終了するまで値が保持される

7. スコープを理解するための実践例

7. スコープを理解するための実践例
7. スコープを理解するための実践例

これまでの内容を踏まえ、関数のスコープに関する動作をまとめた実践例を紹介します。


<?php
$globalVar = "グローバル変数";

function testScope() {
    $localVar = "ローカル変数";
    static $staticVar = 0;
    global $globalVar;

    $staticVar++;
    
    echo "関数内のローカル変数: $localVar<br>";
    echo "関数内のグローバル変数: $globalVar<br>";
    echo "関数内の静的変数: $staticVar<br>";
    echo "<br>";
}

testScope();
testScope();
testScope();
?>

このコードを実行すると、次のような結果になります。


関数内のローカル変数: ローカル変数
関数内のグローバル変数: グローバル変数
関数内の静的変数: 1

関数内のローカル変数: ローカル変数
関数内のグローバル変数: グローバル変数
関数内の静的変数: 2

関数内のローカル変数: ローカル変数
関数内のグローバル変数: グローバル変数
関数内の静的変数: 3

ポイント:

  • localVar(ローカル変数)は、関数が実行されるたびにリセットされる
  • globalVar(グローバル変数)は、関数外で定義されており、global キーワードで関数内からも参照できる
  • staticVar(静的変数)は、関数を呼び出すたびに値が保持される

このように、関数のスコープを適切に理解することで、プログラムの動作を予測しやすくなります。

8. PHP の変数スコープを学ぶためのおすすめの方法

8. PHP の変数スコープを学ぶためのおすすめの方法
8. PHP の変数スコープを学ぶためのおすすめの方法

変数スコープの理解を深めるには、実際にコードを書いて試すことが重要です。以下の方法を試してみましょう。

1. 実際にコードを書いて動作を確認する

ローカル変数・グローバル変数・静的変数を意識しながら、異なるスコープの変数を使ったプログラムを作成してみましょう。

2. PHP の公式ドキュメントを読む

PHP の公式ドキュメント では、変数スコープについて詳しく解説されています。具体的な例も豊富なので、参考になります。

3. デバッグツールを活用する

PHP でデバッグを行う際に、var_dump()print_r() を使うと、変数の値を確認しながら学習できます。


<?php
$testVar = "デバッグ用の変数";
var_dump($testVar);
?>

このコードを実行すると、次のように出力されます。


string(21) "デバッグ用の変数"

デバッグツールを使うことで、変数の値やスコープをより正確に把握できます。

4. 小さなプログラムを作成してテストする

例えば、関数を使って計算処理を行うプログラムを作成し、ローカル変数・グローバル変数・静的変数の動作を比較してみると理解が深まります。

5. オンラインの学習サイトで練習する

プログラミングの学習サイト(Progate、Paiza、PHPマニュアルなど)で、PHP のスコープに関する練習問題を解いてみるのもおすすめです。

これらの方法を活用して、PHP の変数スコープをしっかりと理解していきましょう!

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Pythonで複数の条件を組み合わせる方法!and・or・notの使い方
Pythonの例外処理(try-except)の基本と応用!エラーハンドリング完全ガイド
Pythonの三項演算子とは?一行で条件分岐を記述する方法
Pythonのmatch文(パターンマッチング)の使い方!switch文の代替
人気記事
No.1
Java&Spring記事人気No1
PHP の関数のスコープを完全解説!ローカル変数とグローバル変数の違いとは?
No.2
Java&Spring記事人気No2
PHP のセッションの有効期限を設定する方法(session_set_cookie_params)
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP の XSS(クロスサイトスクリプティング)対策を完全解説!初心者向けガイド
-