《PHP8上級試験対策》use演算子と名前空間のエイリアスを図解で理解する

  • URLをコピーしました!

はじめに

PHPの名前空間では、異なるスコープに存在するクラスを区別するために namespace を利用します。しかし、長い名前空間を毎回書くのは面倒ですよね。そこで登場するのが use 演算子(エイリアス宣言)です。
この記事では、PHP8上級試験でも頻出の use の仕組みを、図解でわかりやすく整理します。

キーワード: use演算子 / 名前空間 / エイリアス / インポート /

目次

🧩 問題コード

<?php
declare(strict_types=1);
namespace Exam{
    class Hoge{
    }
}

namespace ExamTest{
    use Exam\Hoge as Foo;

    \error_reporting(-1);
    $obj = new Foo();
    var_dump($obj);
}

💡 実行結果

object(Exam\Hoge)#1 (0) {
}

🔍 解説ステップ

① 名前空間の定義
まず、次の2つの名前空間が存在しています:

Exam       → Hoge クラスを定義  
ExamTest   → use宣言で Hoge に別名 Foo を付ける

use の役割

use Exam\Hoge as Foo;

これは、「Exam\Hoge クラスを Foo という別名で呼び出せるようにする」宣言です。
つまり「インポート」ではなく「別名宣言」。

new Foo() の意味
ExamTest 内で new Foo() と書いても、実際には以下と同じ意味になります。

$obj = new Exam\Hoge();

なぜなら、FooExam\Hoge のエイリアスだからです。

🎨 ASCIIアートで理解する:名前空間とエイリアスの関係

+----------------------------+
| namespace Exam             |
|   └── class Hoge           |
+----------------------------+

         │
         │ use Exam\Hoge as Foo
         ▼
+----------------------------+
| namespace ExamTest         |
|   └── Foo → Exam\Hoge      |
|       $obj = new Foo();    |
|       // 実際は Exam\Hoge  |
+----------------------------+

=> 出力: object(Exam\Hoge)#1 (0) { }

この図のように、use は「矢印でつながる別名宣言」だと覚えるとイメージしやすいです。

⚙️ use は「インポート」ではない!

重要な点ですが、use はファイルを読み込む構文ではありません。
すでに読み込まれているクラスを「このスコープでこう呼ぶ」と宣言しているだけです。

つまり:

  • 動作時のクラスは変わらない
  • 別名(ショートカット)をつけるだけ
  • 🚫 requireinclude とはまったく別物

まとめ

項目内容
宣言use Exam\Hoge as Foo;
意味Exam\Hoge に別名 Foo を付ける
実際の動作$obj = new Exam\Hoge(); と同じ
出力結果object(Exam\Hoge)#1 (0) { }
試験ポイントuse は「読み込み」ではなく「別名宣言」

📝 暗記フレーズ

use は import ではなく alias」
new Foo()new Exam\Hoge() に展開される」

この記事が気に入ったら
いいねしてね!

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