はじめに
PHPでは、同名のクラスや関数が混在するのを防ぐために「名前空間(namespace)」が用意されています。しかし試験問題の中には、「名前空間の階層構造はサポートされていない」といった誤った選択肢も登場します。
ここでは、PHPにおける名前空間の正しい仕組みと、実際にエラーとなるケースを図で整理して解説します。
目次
名前空間の基本
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 | ✅ OK | declareは例外的に先頭可 |
🧩 試験対策ポイント
PHPの名前空間はフォルダ構造のように階層を持たせることができる点が特徴です。
一方で「同時に複数namespaceを宣言」はNGという仕様をしっかり区別して覚えておくと、試験でも迷わなくなります。