PHPの変数のスコープについて

採用はこちら

PHPの変数のスコープとは、変数を参照できる範囲のことです。

簡単にいうと、ある変数を「どこで使えるのか」を決めるルールです。

PHPでは、変数を定義した場所によって、その変数を使える範囲が変わります。

特に重要なのは、関数の外で定義した変数は、関数の中からそのまま使えないという点です。

たとえば、次のコードを見てください。

$name = "佐藤";

function showName() {
    echo $name;
}

showName();

一見すると "佐藤" と表示されそうですが、このコードでは関数内の $name は未定義です。

PHPでは、関数の外側と内側で変数のスコープが分かれているため、外側で定義した $name を関数内で自動的に参照することはできません。

PHPの変数スコープを理解しておくと、未定義変数の警告や、意図しない値の上書き、global への依存などを防ぎやすくなります。

目次

PHPの主な変数スコープ

PHPでまず押さえておきたいスコープは、主に次のとおりです。

種類内容
グローバルスコープ関数やメソッドの外側で定義された変数の範囲
ローカルスコープ関数やメソッドの内側で定義された変数の範囲
スーパーグローバル$_GET$_POST など、どこからでも参照できる特別な変数
クロージャのスコープ無名関数内のスコープ
クラスの可視性publicprotectedprivate によるアクセス制御

PHPでは、JavaScriptのように iffor{} が必ず新しいスコープを作るわけではありません。

そのため、PHPの変数スコープを理解する際は、まず次の違いを押さえることが大切です。

// 関数外:グローバルスコープ
$message = "こんにちは";

function hello() {
    // 関数内:ローカルスコープ
    $text = "Hello";
}

グローバルスコープとは?

グローバルスコープとは、関数やメソッドの外側で定義された変数の有効範囲のことです。

$message = "こんにちは";

echo $message;

この $message はグローバルスコープの変数です。

同じグローバルスコープ内であれば、後続の処理から参照できます。

$siteName = "My Blog";

echo $siteName;

この場合、$siteName は問題なく表示されます。

グローバル変数は関数内から自動的には参照できない

注意したいのは、グローバルスコープで定義した変数が、関数内から自動的に参照できるわけではないことです。

$price = 1000;

function showPrice() {
    echo $price;
}

showPrice();

このコードでは、関数 showPrice() の中にある $price は未定義です。

関数の外に $price があっても、関数内のローカルスコープには自動的に持ち込まれません。

ローカルスコープとは?

ローカルスコープとは、関数やメソッドの内側で定義された変数の有効範囲のことです。

function hello() {
    $message = "こんにちは";
    echo $message;
}

hello();

この $message は、関数 hello() の中でだけ使える変数です。

関数の外からは参照できません。

function hello() {
    $message = "こんにちは";
}

hello();

echo $message;

このコードでは、関数外の $message は定義されていません。

そのため、PHPのバージョンやエラー表示設定によって、未定義変数に関する Warning や Notice が発生する可能性があります。

関数内の変数は外側に出てこない

関数の中で作った変数は、基本的にその関数の外では使えません。

function createMessage() {
    $message = "こんにちは";
}

createMessage();

echo $message; // 関数外では未定義

関数内で作った値を外で使いたい場合は、return を使って値を返します。

function createMessage() {
    $message = "こんにちは";
    return $message;
}

$result = createMessage();

echo $result;

関数外の変数を関数内で使う方法

関数の外側にある変数を関数内で使いたい場合、主な方法は次の3つです。

  1. 引数で渡す
  2. global を使う
  3. $GLOBALS を使う

実務では、基本的に引数で渡す方法が最もおすすめです。

引数で渡す

もっともわかりやすく、安全なのは、必要な値を関数の引数として渡す方法です。

$price = 1000;

function showPrice($price) {
    echo $price;
}

showPrice($price);

このように書けば、関数の中で $price を使えます。

この書き方の良いところは、関数がどの値を必要としているのかが明確になることです。

function calculateTax($price, $taxRate) {
    return $price * $taxRate;
}

echo calculateTax(1000, 0.1);

この関数は、$price$taxRate を使って税額を計算していることが、引数を見るだけでわかります。

実務では、必要な値は引数で受け取り、結果は戻り値で返す書き方が基本です。

function calculateTotal($price, $taxRate) {
    $tax = $price * $taxRate;
    return $price + $tax;
}

$total = calculateTotal(1000, 0.1);

echo $total;

globalキーワードを使う

関数内でグローバル変数を使う方法として、global キーワードがあります。

$price = 1000;

function showPrice() {
    global $price;
    echo $price;
}

showPrice();

global $price; と書くことで、関数内の $price がグローバルスコープの $price を参照するようになります。

ただし、global の多用はおすすめできません。

理由は、関数が外部の変数に依存していることがわかりにくくなるためです。

$taxRate = 0.1;

function calculateTax($price) {
    global $taxRate;
    return $price * $taxRate;
}

この関数は、引数だけを見ると $price だけを使っているように見えます。

しかし実際には、外側の $taxRate に依存しています。

このようなコードは、規模が大きくなるほど読みづらく、テストもしにくくなります。

より良い書き方は、次のように引数で渡す方法です。

function calculateTax($price, $taxRate) {
    return $price * $taxRate;
}

echo calculateTax(1000, 0.1);

global はPHPの機能として使えますが、実務では必要な場面に限定するのがよいでしょう。

$GLOBALSを使う

PHPには $GLOBALS というスーパーグローバル変数があります。

$GLOBALS は、グローバルスコープの変数を配列として参照できる仕組みです。

$price = 1000;

function showPrice() {
    echo $GLOBALS['price'];
}

showPrice();

このコードでは、$GLOBALS['price'] によってグローバル変数 $price を参照しています。

値を書き換えることもできます。

$count = 1;

function increment() {
    $GLOBALS['count']++;
}

increment();

echo $count; // 2

ただし、$GLOBALSglobal と同じく、使いすぎるとコードの依存関係が見えにくくなります。

そのため、実務では多用せず、基本的には引数と戻り値でデータを受け渡しするのがおすすめです。

ifforはブロックスコープを作らない

PHPでは、ifforwhileforeach などの通常の制御構文は、基本的に新しい変数スコープを作りません。

if (true) {
    $message = "こんにちは";
}

echo $message;

このコードでは、if の中で定義した $message を外側でも参照できます。

出力は次のようになります。

こんにちは

for 文でも同じです。

for ($i = 0; $i < 3; $i++) {
    $text = "ループ中";
}

echo $i;
echo $text;

この場合、$i$textfor 文の外でも参照できます。

JavaScriptの letconst のようなブロックスコープとは挙動が異なるため、注意が必要です。

ブロックスコープを作るもの・作らないもの

PHPでは、制御構文と関数でスコープの扱いが異なります。

書き方新しい変数スコープを作るか
if基本的に作らない
for基本的に作らない
while基本的に作らない
foreach基本的に作らない
function作る
無名関数作る
アロー関数作る
メソッド作る

つまり、PHPでは通常の制御構文よりも、関数・メソッド・クロージャでスコープが分かれると考えると理解しやすいです。

foreachの変数スコープ

PHPでは、foreach で使った変数もループ後に残ります。

$items = ["A", "B", "C"];

foreach ($items as $item) {
    echo $item;
}

echo $item;

最後の echo $item; では、最後に代入された "C" が表示されます。

$items = ["A", "B", "C"];

foreach ($items as $item) {
    echo $item;
}

echo $item; // C

このように、foreach のループ変数は、ループが終わってもスコープから消えません。

参照付きforeachではunset()が重要

foreach で参照渡しを使う場合は、特に注意が必要です。

$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 2;
}

このコードでは、配列の各要素を2倍にしています。

処理後の $numbers は次のようになります。

[2, 4, 6]

ただし、参照付き foreach のあと、$number は最後の要素への参照を持ったままになります。

その状態で同じ変数名を使うと、意図しない書き換えが起きることがあります。

$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 2;
}

// unset($number); をしていない

foreach ($numbers as $number) {
    echo $number . PHP_EOL;
}

参照付き foreach を使ったあとは、次のように unset() して参照を切るのが安全です。

$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 2;
}

unset($number);

この unset($number); は、配列の要素を削除するのではなく、変数 $number と最後の要素との参照関係を切るために使います。

関数の引数とスコープ

関数の引数は、その関数内で使えるローカル変数として扱われます。

function greet($name) {
    echo "こんにちは、" . $name . "さん";
}

greet("佐藤");

この $name は、関数 greet() の中だけで有効です。

外側に同じ名前の変数があっても、基本的には別の変数です。

$name = "田中";

function greet($name) {
    echo $name;
}

greet("佐藤");

echo $name;

出力は次のようになります。

佐藤田中

関数内の $name には "佐藤" が入り、関数外の $name"田中" のままです。

値渡し

PHPの関数引数は、通常は値渡しです。

function changeName($name) {
    $name = "佐藤";
}

$name = "田中";

changeName($name);

echo $name;

この場合、出力は次のようになります。

田中

関数内で $name を変更しても、外側の $name は変更されません。

参照渡し

外側の変数そのものを変更したい場合は、引数に & を付けます。

function changeName(&$name) {
    $name = "佐藤";
}

$name = "田中";

changeName($name);

echo $name;

出力は次のようになります。

佐藤

&$name とすることで、関数内の変更が外側の変数にも反映されます。

ただし、参照渡しを多用すると、どこで値が変わったのか追いにくくなります。

実務では、できるだけ戻り値を使うほうが読みやすいです。

function changeName($name) {
    return "佐藤";
}

$name = "田中";
$name = changeName($name);

echo $name;

static変数とは?

通常、関数内のローカル変数は、関数の実行が終わると破棄されます。

function countUp() {
    $count = 0;
    $count++;
    echo $count . PHP_EOL;
}

countUp();
countUp();
countUp();

出力は次のようになります。

1
1
1

毎回 $count = 0; から始まるため、常に 1 が表示されます。

一方、static を使うと、関数の実行後も値を保持できます。

function countUp() {
    static $count = 0;
    $count++;
    echo $count . PHP_EOL;
}

countUp();
countUp();
countUp();

出力は次のようになります。

1
2
3

static $count = 0; は最初の1回だけ初期化され、その後は前回の値を保持します。

static変数の使いどころ

static 変数は、関数内で前回の値を覚えておきたい場合に使えます。

function generateId() {
    static $id = 0;
    $id++;
    return "ID-" . $id;
}

echo generateId(); // ID-1
echo generateId(); // ID-2
echo generateId(); // ID-3

ただし、static 変数は関数内部に状態を持つため、使いすぎるとテストやデバッグが難しくなることがあります。

必要な場面に絞って使うのがよいでしょう。

クロージャのスコープ

PHPでは、無名関数を変数に代入できます。

このような無名関数は、クロージャとも呼ばれます。

$hello = function () {
    echo "こんにちは";
};

$hello();

クロージャも関数なので、外側の変数をそのまま参照することはできません。

$name = "佐藤";

$hello = function () {
    echo $name;
};

$hello();

このコードでは、クロージャ内の $name は未定義です。

外側の変数をクロージャ内で使うには、use を使います。

$name = "佐藤";

$hello = function () use ($name) {
    echo "こんにちは、" . $name . "さん";
};

$hello();

出力は次のようになります。

こんにちは、佐藤さん

useは基本的に値をコピーする

クロージャの use は、基本的に値渡しです。

$name = "佐藤";

$hello = function () use ($name) {
    echo $name;
};

$name = "田中";

$hello();

出力は次のようになります。

佐藤

クロージャを作った時点の $name が取り込まれるため、その後に外側の $name を変更しても、クロージャ内の値は変わりません。

参照として取り込む場合

外側の変数の変更をクロージャにも反映させたい場合は、& を付けて参照として取り込みます。

$name = "佐藤";

$hello = function () use (&$name) {
    echo $name;
};

$name = "田中";

$hello();

出力は次のようになります。

田中

use (&$name) とすることで、外側の $name を参照として取り込めます。

アロー関数のスコープ

PHP 7.4以降では、アロー関数を使えます。

$taxRate = 0.1;

$calcTax = fn($price) => $price * $taxRate;

echo $calcTax(1000);

アロー関数では、式の中で使われた外側の変数が自動的に取り込まれます。

通常の無名関数で書くと、次のようになります。

$taxRate = 0.1;

$calcTax = function ($price) use ($taxRate) {
    return $price * $taxRate;
};

アロー関数を使うと、use ($taxRate) を書かなくても済みます。

$calcTax = fn($price) => $price * $taxRate;

ただし、アロー関数は外側の変数を値渡しで取り込みます。

$count = 1;

$fn = fn() => $count;

$count = 2;

echo $fn();

出力は次のようになります。

1

アロー関数を作った時点の $count が取り込まれるため、その後に外側の $count を変更しても、アロー関数内の値は変わりません。

アロー関数では外側の変数を直接変更できない

次のコードを見てください。

$count = 1;

$fn = fn() => $count++;

$fn();

echo $count;

この場合、外側の $count は変更されません。

アロー関数は外側の変数を値として取り込むため、外側の変数そのものを変更する用途には向いていません。

外側の変数を変更したい場合は、通常のクロージャで参照渡しを使います。

$count = 1;

$fn = function () use (&$count) {
    $count++;
};

$fn();

echo $count; // 2

スーパーグローバル変数とは?

PHPには、関数内でも global を書かずに参照できる特別な変数があります。

これをスーパーグローバル変数といいます。

代表的なものは次の通りです。

変数内容
$_GETURLのクエリパラメータ
$_POSTPOST送信されたデータ
$_REQUESTGET、POST、COOKIEなどの値
$_SERVERサーバー情報やリクエスト情報
$_SESSIONセッション情報
$_COOKIECookie情報
$_FILESアップロードファイル情報
$_ENV環境変数
$GLOBALSグローバル変数一覧

たとえば、関数内でも $_GET を直接参照できます。

function showId() {
    echo $_GET['id'];
}

スーパーグローバルを使うときの注意点

実務では、スーパーグローバルのキーが存在するかどうかを確認する必要があります。

$id = $_GET['id'] ?? null;

また、$_GET$_POST はユーザーが送信した値なので、必ず検証やエスケープを行う必要があります。

$id = $_GET['id'] ?? null;

if ($id !== null) {
    echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8');
}

$_SESSION を使う場合は、通常は事前に session_start() を呼び出します。

session_start();

$_SESSION['user_id'] = 123;

スーパーグローバルは便利ですが、直接使いすぎるとテストしにくくなるため、実務では必要に応じてラップして扱うこともあります。

includerequireのスコープ

PHPでは、includerequire を使って別ファイルを読み込めます。

このとき、読み込まれたファイルは、読み込まれた場所のスコープを引き継ぎます

グローバルスコープで読み込む場合

main.php

$name = "佐藤";

include "profile.php";

profile.php

echo $name;

この場合、profile.php はグローバルスコープで読み込まれているため、$name を参照できます。

関数内で読み込む場合

function showProfile() {
    $name = "佐藤";
    include "profile.php";
}

showProfile();

profile.php

echo $name;

この場合、profile.php は関数 showProfile() の中で読み込まれているため、関数内の $name を参照できます。

つまり、includerequire されたファイルのスコープは、読み込まれた場所によって変わります。

クラス内の変数とアクセス制御

PHPのクラスでは、プロパティやメソッドにアクセス修飾子を付けられます。

主なアクセス修飾子は次の3つです。

修飾子意味
publicクラスの外からでもアクセスできる
protectedそのクラス自身と子クラスからアクセスできる
privateそのクラス自身からのみアクセスできる

ただし、これは厳密には「変数スコープ」というより、クラスメンバーのアクセス制御です。

関数内のローカル変数とは少し別の概念として理解するとよいです。

public

class User {
    public $name = "佐藤";
}

$user = new User();

echo $user->name;

public なプロパティは、クラスの外からアクセスできます。

private

class User {
    private $password = "secret";
}

$user = new User();

echo $user->password;

このコードはエラーになります。

private なプロパティは、クラスの外から直接アクセスできません。

値を取得したい場合は、メソッドを通してアクセスします。

class User {
    private $password = "secret";

    public function getPassword() {
        return $this->password;
    }
}

$user = new User();

echo $user->getPassword();

protected

class User {
    protected $role = "member";
}

class Admin extends User {
    public function showRole() {
        return $this->role;
    }
}

$admin = new Admin();

echo $admin->showRole();

protected なプロパティは、そのクラス自身と子クラスの中からアクセスできます。

ただし、クラスの外から直接アクセスすることはできません。

echo $admin->role;

このコードはエラーになります。

$thisとプロパティの関係

クラスの中で、オブジェクト自身のプロパティにアクセスするには $this を使います。

class User {
    private $name;

    public function setName($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$user = new User();
$user->setName("佐藤");

echo $user->getName();

$this->name は、そのオブジェクトが持っている name プロパティを表します。

$this->name$this->$nameの違い

初心者がよく間違えるのが、次のような書き方です。

$this->$name

これは、name というプロパティにアクセスしているのではありません。

$name という変数の中身をプロパティ名として使う書き方です。

たとえば、次のような場合には有効です。

class User {
    public $name = "佐藤";
    public $email = "sato@example.com";

    public function show($property) {
        echo $this->$property;
    }
}

$user = new User();
$user->show("email");

この場合、$property の中身は "email" なので、$this->$property$this->email のように扱われます。

通常のプロパティアクセスでは、次のように書きます。

$this->name

動的にプロパティ名を指定したい場合だけ、次のように書きます。

$this->$property

staticプロパティとstaticメソッド

クラスには、インスタンスを作らずに使える static プロパティや static メソッドがあります。

class Counter {
    public static $count = 0;

    public static function increment() {
        self::$count++;
    }
}

Counter::increment();

echo Counter::$count;

出力は次のようになります。

1

クラス内でstaticプロパティにアクセスする場合は、self::$count のように書きます。

self::$count

通常のインスタンスプロパティは、次のように $this を使います。

$this->name

一方、staticプロパティは次のようにアクセスします。

self::$count

この違いは重要です。

名前空間と変数スコープの違い

PHPには namespace という仕組みがあります。

namespace App;

class User {
}

名前空間は、クラス名、関数名、定数名などの衝突を避けるための仕組みです。

一方、変数スコープは、変数をどこから参照できるかを決める仕組みです。

名前空間と変数スコープは関係がありますが、同じものではありません。

項目役割
変数スコープ変数を参照できる範囲を決める
名前空間クラス名・関数名・定数名などの衝突を防ぐ
アクセス修飾子クラスのプロパティやメソッドにアクセスできる範囲を決める

初心者のうちは、この3つを分けて理解するとよいです。

PHPの変数スコープでよくあるミス

PHPの変数スコープを理解していないと、未定義変数や意図しない値の変更につながることがあります。

ここでは、よくあるミスを紹介します。

関数外の変数を関数内でそのまま使おうとする

$siteName = "My Blog";

function showSiteName() {
    echo $siteName;
}

このコードでは、関数内の $siteName は未定義です。

修正するなら、引数で渡します。

$siteName = "My Blog";

function showSiteName($siteName) {
    echo $siteName;
}

showSiteName($siteName);

globalに頼りすぎる

$db;

function getUser() {
    global $db;
}

このようなコードは、関数が外部の $db に依存していることがわかりにくくなります。

より良い書き方は、必要な値を引数で渡すことです。

function getUser($db) {
    // $dbを使って処理する
}

オブジェクト指向で書く場合は、コンストラクタで依存を渡す方法もあります。

class UserRepository {
    private $db;

    public function __construct($db) {
        $this->db = $db;
    }
}

参照付きforeachのあとにunset()しない

$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 2;
}

foreach ($numbers as $number) {
    echo $number;
}

参照付き foreach のあとに同じ変数名を使うと、意図しない動作につながる可能性があります。

修正例は次のとおりです。

$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 2;
}

unset($number);

foreach ($numbers as $number) {
    echo $number;
}

$this->name$this->$nameを混同する

class User {
    private $name;

    public function setName($name) {
        $this->$name = $name;
    }
}

このコードでは、意図したプロパティに値が入らない可能性があります。

通常は次のように書きます。

class User {
    private $name;

    public function setName($name) {
        $this->name = $name;
    }
}

$this->$name は、変数 $name の中身をプロパティ名として使う特殊な書き方です。

スーパーグローバルの値をそのまま使う

echo $_GET['id'];

このコードは、id が存在しない場合に警告が出る可能性があります。

また、ユーザー入力をそのまま出力すると、セキュリティ上の問題につながることもあります。

より安全に書くなら、次のようにします。

$id = $_GET['id'] ?? null;

if ($id !== null) {
    echo htmlspecialchars($id, ENT_QUOTES, 'UTF-8');
}

スーパーグローバルは便利ですが、必ず存在確認・検証・エスケープを意識しましょう。

PHPの変数スコープを扱うときの実務的な考え方

PHPのスコープを扱うときは、次の方針を意識するとコードが読みやすくなります。

方針理由
必要な値は引数で渡す関数の依存関係が明確になる
結果は return で返すデータの流れがわかりやすい
global はなるべく避ける外部状態への依存が見えにくくなる
$GLOBALS を多用しないコードの追跡が難しくなる
参照渡しは必要な場合だけ使う予期しない副作用を防ぎやすい
参照付き foreach の後は unset() する参照残りによるバグを防げる
スーパーグローバルは直接使いすぎないテストや保守がしやすくなる
クラスでは private を基本にするオブジェクトの状態を安全に管理しやすい

基本は「引数で受け取り、戻り値で返す」

実務では、次のような考え方を基本にすると安全です。

function 関数名($必要な値) {
    // ローカル変数で処理する
    return $結果;
}

つまり、必要な値は引数で受け取り、処理結果は戻り値で返すという考え方です。

この形にすると、関数が何に依存していて、何を返すのかが明確になります。

悪い例と良い例

ここでは、PHPの変数スコープを踏まえた悪い例と良い例を比較します。

悪い例

$taxRate = 0.1;

function calculateTotal($price) {
    global $taxRate;
    return $price + ($price * $taxRate);
}

echo calculateTotal(1000);

このコードは動きます。

しかし、calculateTotal()$taxRate に依存していることが、関数の定義だけではわかりにくいです。

良い例

function calculateTotal($price, $taxRate) {
    return $price + ($price * $taxRate);
}

echo calculateTotal(1000, 0.1);

この書き方なら、関数に必要な値が明確です。

さらに実務向けの例

class PriceCalculator {
    private $taxRate;

    public function __construct($taxRate) {
        $this->taxRate = $taxRate;
    }

    public function calculateTotal($price) {
        return $price + ($price * $this->taxRate);
    }
}

$calculator = new PriceCalculator(0.1);

echo $calculator->calculateTotal(1000);

税率をオブジェクトの状態として持たせることで、関連する処理をクラス内にまとめられます。

PHPの変数スコープの重要ポイント

最後に、PHPの変数スコープで特に重要なポイントを整理します。

場所・機能スコープの考え方
関数外の変数グローバルスコープに属する
関数内の変数ローカルスコープに属する
関数の引数関数内のローカル変数として扱われる
if / for / while基本的に新しい変数スコープを作らない
foreachループ変数はループ後も残る
globalグローバル変数を関数内で使うためのキーワード
$GLOBALSグローバル変数を配列として参照できる
static 変数関数の実行後も値を保持する
クロージャ外側の変数を使うには通常 use が必要
アロー関数使用した外側の変数を自動的に値渡しで取り込む
スーパーグローバル関数内でも global なしで参照できる
クラスプロパティpublicprotectedprivate によって可視性が決まる

PHPの変数スコープについてのまとめ

PHPの変数スコープで最も重要なのは、関数の外で定義した変数は、関数の中からそのまま参照できないという点です。

$var = "外側";

function test() {
    echo $var; // 関数内では未定義
}

関数内で外側の値を使いたい場合は、基本的には引数で渡します。

$var = "外側";

function test($var) {
    echo $var;
}

test($var);

global$GLOBALS を使う方法もありますが、実務では依存関係が見えにくくなるため、必要な場面に限定するのがよいでしょう。

また、PHPでは iffor は基本的にブロックスコープを作りません。

一方で、関数、メソッド、クロージャは独立したスコープを持ちます。

さらに、クロージャでは use、アロー関数では自動的な値渡し、クラスでは public / protected / private によるアクセス制御など、場面によってスコープの考え方が変わります。

PHPのスコープを正しく理解しておくと、未定義変数の警告、意図しない値の上書き、global への依存、参照付き foreach のバグなどを防ぎやすくなります。

実務では、必要な値は引数で受け取り、処理結果は戻り値で返すという考え方を基本にすると、PHPのコードは読みやすく、保守しやすくなります。

以上、PHPの変数のスコープについてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次