名前空間(namespace)とuseの違いを、図書館と本の例えを使って説明します。
名前空間(namespace)は図書館のセクション
想像してみてください。大きな図書館があって、その中にはたくさんのセクションがあります。それぞれのセクションには異なる種類の本が並んでいます。
- 名前空間はそのセクションの名前:
たとえば、図書館に「科学」セクションと「歴史」セクションがあるとします。これらのセクション名は、名前空間に相当します。科学の本は科学セクション、歴史の本は歴史セクションにあります。 - 目的:
「同じタイトルだけど内容が異なる本」(たとえば「地球の成り立ち」というタイトルの科学用の本と歴史用の本)が名前の衝突をしないようにするためです。それぞれの本はセクション名(名前空間)を持つことで、それがどの領域に属しているのかを明確に区別できます。
PHPでの例
namespace Science;
class Earth {
// 科学セクションに関連したクラス
}
namespace History;
class Earth {
// 歴史セクションに関連したクラス
}
useは図書館の本を借りる
今度は、あなたが特定のセクションの本を借りて、自分の机に持っていくことを考えてみましょう。
- useは本を借りる行為:
あなたが科学セクションから「地球」という本を持ってくると、その本を自分の座る場所で簡単に参照できます。これがuseの役割です。同じ名前の別の本と混同することなく、特定のセクションから特定の本を借りてこれます。 - 目的:
各セクションに行く手間を省くために、どの本棚(名前空間)からどの本(クラス)を使うのか、あらかじめ宣言して簡単に使えるようにするものです。
PHPでの例
use Science\Earth as ScienceEarth;
use History\Earth as HistoryEarth;
$earthScience = new ScienceEarth();
$earthHistory = new HistoryEarth();
この例では、useを使って、異なる名前空間にある同じ名前のクラスを区別することができます。それぞれの名前空間からクラスを机の上に置いて、簡単に使うことができるようになっています。
まとめ
- 名前空間(namespace)は、図書館のセクションのように、同じ名前でも違う内容を整理するためのものです。
- useは、図書館の特定のセクションから本を借りて、いつでも簡単にアクセスできるようにする方法です。
このように名前空間とuseを図書館のセクションと本の借り方に例えると、どのようにコードを整理し、どのようにそのコードを使いやすくするかイメージしやすくなります。