カテゴリ: PHP 更新日: 2026/03/02

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 の変数スコープをしっかりと理解していきましょう!

まとめ

まとめ
まとめ

PHP の関数スコープに関する知識は、プログラムの正確な動作を理解するうえで非常に重要です。ローカル変数は関数内に限定され、グローバル変数はスクリプト全体で利用可能ですが、関数内で使用するには global キーワードや $GLOBALS 配列が必要でした。また、静的変数(static)を使えば、関数呼び出し間でも変数の状態を保持できます。
このようなスコープの違いを理解し、状況に応じた変数の使い分けを実践することで、予期しないバグの発生を防ぎ保守性の高いコードを実現できます。

ローカル・グローバル・静的変数の使い方まとめ

  • ローカル変数は関数内でのみ使用し、再利用性と安全性を高めます。
  • グローバル変数は影響範囲が広いため、使用は最小限にし、必要に応じて global$GLOBALS で参照。
  • 静的変数は状態保持が必要な場面(カウンターや一時的なメモリ)で活用。
  • スコープの概念を理解することで、関数の独立性コードの保守性 を高められる。

スコープの違いを活かした応用例


<?php
$count = 0;

function countCalls() {
    static $called = 0;
    global $count;

    $called++;
    $count++;

    echo "静的変数: $called 回目<br>";
    echo "グローバル変数: $count 回目<br>";
}

countCalls();
countCalls();
countCalls();
?>

このサンプルコードでは、静的変数が関数内で状態を保持し、グローバル変数がスクリプト全体のカウントを管理しています。それぞれの変数スコープを適切に使うことで、柔軟で安定したコードを書くことができます。

先生と生徒の振り返り会話

新人

「スコープって最初はややこしかったけど、今はかなり整理できました! ローカル、グローバル、static それぞれに役割があるんですね。」

先輩

「そのとおり!特にグローバル変数は便利な反面、誤用するとバグの温床になるから、必要なとき以外は避けたほうがいいね。」

新人

「static変数が状態を保持できるのも面白かったです!カウントアップやログの記録にも使えそうですね。」

先輩

「そうだね。スコープを正しく使い分けることで、コードが読みやすく保守性もアップするよ。これからも意識してコードを書いていこう!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHP のローカル変数とは何ですか?スコープの意味も知りたいです。

PHP におけるローカル変数とは、関数の中で定義され、その関数の内部だけで使える変数のことです。スコープとは変数の「有効範囲」を意味し、どこでその変数が使えるかを決定します。

PHP のグローバル変数とローカル変数の違いを教えてください。

PHP のグローバル変数は関数の外で定義され、スクリプト全体で使えますが、関数内から直接アクセスできません。一方、ローカル変数は関数の中で定義され、その関数の外では使えません。

PHP で関数の中からグローバル変数を使うにはどうしたらいいですか?

PHP で関数の中からグローバル変数を使うには「global キーワード」を使うか、「$GLOBALS 配列」を使うことでアクセスできます。
コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
New1
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
New2
Python
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
New3
Python
Pythonの仮想環境とは?venvを使った環境構築の手順を初心者向けに解説
New4
Python
Pythonのダックタイピングを完全ガイド!初心者でもわかる動的なオブジェクト指向設計
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでエラーメッセージを取得する方法を完全解説!初心者でもわかるExceptionオブジェクト
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
PHP
PHP の MySQL にデータを挿入する方法(INSERT 文の実行)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
PHP
PHPの可変長引数(...$args)の使い方を完全ガイド!初心者でもわかる基本と活用方法
No.7
Java&Spring記事人気No7
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.8
Java&Spring記事人気No8
Python
PythonでSQLiteを使う方法を完全ガイド!初心者でもわかるデータベース基本操作