【PHP入門】名前空間(namespace/use)の使い方をわかりやすく解説!

プログラムにおいて、クラスや関数などの名前の衝突を防ぐために名前空間を使用して、それぞれグループ化することがあります。

PHPでは、namespaceuseといったキーワードを使用して名前空間を使用します。

この記事では、

・namespaceとは?
・namespaceの基本的な使い方
・namespaceを{}(波カッコ)で囲む方法
・namespaceの注意点
・useとは?
・useの基本的な使い方

などの名前空間の使い方に関して解説していきます。

今回はそんな名前空間(namespace use)を使用する方法について、わかりやすく解説します!

namespaceとは

namespace名前空間とも呼ばれ、項目をカプセル化するときに使用します。

名前空間とは、例えば通常同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。

そのため、名前空間を指定しておけば自分が作ったクラスが、サードパーティのクラスや関数などと名前が衝突することを防ぐことができます。

namespaceは以下のように記述します。

書き方:

名前空間はソースコードの1番先頭で宣言する必要があります。
「クラス」「インターフェイス」「関数」「定数」が名前空間の影響を受けます。

また、namespaceの前にHTMLを記述するとエラーになりますので注意しましょう。

このようにHTMLを記述するとエラーとなります。

namespaceの使い方

ここでは、namespaceを使用しないで別々のソースファイルから同名の関数を呼出したときにどうなるかを説明するとともに、名前空間を使用してどのように解決するかを見ていきましょう。

名前の衝突とは

namespaceを指定すれば、前述したように同一のファイルでクラスや関数などの名前の衝突を防ぐことができます。

例えば、以下のソースファイルsample1.phpに同じ名前の関数が存在し、sample2.phpから関数を呼び出そうとすると、エラーが発生します。

sample1.php

sample2.php

エラー:

当然ながら関数getNameが既に存在するため、再宣言できない旨のエラーが発生しています。

名前空間を指定する

前項で同一ファイルで同じ関数名を指定しても、同名の関数が使用できないことがわかりました。

そこで同じ関数名を使用するためにはnamespaceを使用して、関数を明確に区別する必要があります。

以下にnamespaceを使用して、同一関数名を呼び出す方法を記述します。

sample1.php

sample2.php

実行結果:

今回はしっかりと同一関数が呼び出せることがわかりましたね!

namespaceを宣言すると、その後に記述した関数はその名前空間の関数に属します。

サンプルではname1とname2を宣言して、その直後に関数を記述しているため、name1のgetName関数とname2のgetName関数でそれぞれ区別されることになります。

sample2.phpで関数を呼び出すときは、「名前空間\関数名」とすれば同一の関数を呼び出すことが可能となります。

{}(波カッコ)で囲む方法

名前空間は{}(波カッコ)で囲んで定義することもできます。

波カッコで囲む場合は、namespaceで指定したい範囲を囲む必要があります。

sample1.php

sample2.php

実行結果:

波カッコを使用しても、先ほどのサンプルと同様に関数をそれぞれ呼び出せることがわかりますね!

名前空間は波カッコで囲んだほうがわかりやすいですが、なるべく1つのファイルには1つの名前空間にすることが推奨されています。

名前空間の注意点

名前空間は、範囲を波カッコで囲むと、名前空間の範囲の外で命令文を記述することができなくなります。

以下のサンプルではエラーが発生します。

名前空間の外で命令文を記述:

エラー:

{}(波カッコ)の外のコードが存在しない旨のエラーが発生しました。

そのため、namespaceを波カッコで指定するときには注意しましょう。

useとは

useとは名前空間の拡張機能で、外部のエイリアスやその一部を参照したり、クラス・関数・定数などをインポートするときに使用します。

useキーワードは、WindowsのショートカットやUnix系のシンボリックリンクを作成する機能に似ています。

useキーワードを使用して、エイリアスを定義するためには以下のように記述します。

書き方:

useキーワードを使用すれば、名前空間などのフルパスを短縮して、別の名称で定義することが可能です。

useの使い方

以下にuseキーワードを使用して名前空間の一部を取得し、それぞれの名前空間の関数を呼び出す方法を記述します。

place.php

read.php

実行結果:

サンプルではuseキーワードを使用して、place.phpの3つ名前空間の共通バスである「asia\japan\tokyo 」までをインポートして、名前空間を「name」の名称に指定しています。

nameからそれぞれのエリアの名称と関数をつなげれば、パスを短縮して同名の関数を呼び出すことができます。

まとめ

ここでは名前空間を定義するnamespaceの基本的な使い方から、名前空間やクラス、関数などをインポートするuseの使い方を解説しました。

ソースコードなどのファイルが多くなると、名前の衝突を防ぐために名前空間を使用することがありますので、この機会によく覚えておきましょう。

もし、名前空間の意味や使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説