《PHP8上級試験対策》名前空間の階層構造とサポート範囲を正しく理解しよう

  • URLをコピーしました!

はじめに

PHPでは、同名のクラスや関数が混在するのを防ぐために「名前空間(namespace)」が用意されています。しかし試験問題の中には、「名前空間の階層構造はサポートされていない」といった誤った選択肢も登場します。
ここでは、PHPにおける名前空間の正しい仕組みと、実際にエラーとなるケースを図で整理して解説します。

キーワード: 名前空間 / namespace / 階層構造 / Multi-level namespaces /

目次

名前空間の基本

PHPの名前空間は、関連するクラス・関数・定数をまとめて整理するための仕組みです。
宣言は、namespace キーワードを使ってファイルの先頭(declare を除く)に記述します。

<?php
declare(strict_types=1);
namespace Exam\SubLevel;

class Hoge {}
var_dump(new Hoge());

このコードは 正しい構文 であり、問題なく動作します。
実行結果は以下のとおりです。

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

どんなときに「Multi-level namespaces」エラーが出るの?

実は「階層構造(Exam\SubLevel)」がダメなのではなく、“複数の名前空間を1行で同時に宣言” したときにエラーが発生します。

<?php
namespace A\B, C\D;  // ❌ PHPはこの構文をサポートしていない

このときに表示されるのが以下のエラーメッセージです。

Fatal error: Multi-level namespaces are not supported in ...

🧠図で理解する:OKとNGのイメージ

OKパターン(階層構造を定義しているだけ)
└─ Exam
    └─ SubLevel
        └─ Hogeクラス

NGパターン(複数のnamespaceを1行で定義)
└─ A\B, C\D ← これはサポートされていない!

まとめ

内容結果補足
namespace Exam\SubLevel;✅ 正常動作階層構造OK
namespace A\B, C\D;❌ エラー同時定義は未サポート
declare(strict_types=1); の後に namespace✅ OKdeclareは例外的に先頭可

🧩 試験対策ポイント

PHPの名前空間はフォルダ構造のように階層を持たせることができる点が特徴です。
一方で「同時に複数namespaceを宣言」はNGという仕様をしっかり区別して覚えておくと、試験でも迷わなくなります。

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

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