カテゴリ: PHP 更新日: 2025/12/03

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 のグローバル変数は関数の外で定義され、スクリプト全体で使えますが、関数内から直接アクセスできません。一方、ローカル変数は関数の中で定義され、その関数の外では使えません。
コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
No.6
Java&Spring記事人気No6
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.7
Java&Spring記事人気No7
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
No.8
Java&Spring記事人気No8
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
-
-