Help us understand the problem. What is going on with this article?

名前空間たるものを勉強してみた件について

More than 1 year has passed since last update.

はじめに

こんにちは、こんばんは。
ワタタクです。
今回は名前空間について見ていこうと思います。

正直なところ私、名前空間という概念をまったく理解しておりませんでした。
なので自分の勉強だと思い、一から書いていきたいと思います。

名前空間とは

※phpの名前空間はver5.3から使用できます。

  • namespaceとも呼ばれ、項目をカプセル化するときに使われます。
  • 例えば同じファイルに同じクラスや同じ関数名、定数名が存在できませんが、名前空間を使うと関連するクラス、インターフェース、関数、定数などをグループ化することができます。 そのため、名前空間を指定しておけば自分が作ったクラスがサードパーティーのクラスや関数などと名前が衝突することを防ぐことが出来ます。

書き方

書き方は下記の方法。

namespace 名前空間;

注意)
- ソースコードの1番先頭で宣言する。
- namespaceの前にHTMLを書かない。

namespaceの使い方

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

名前の衝突とは

以下のソースはエラーが発生します。

Sample_1.php
function getHoge() {
   return "hoge";
}

function getHoge() {
   return "Boo";
}
Sample_2.php
require_once "Sample_1.php";

echo getHoge();
実行結果:エラー

当然ですよね(笑)

なので、名前空間とやらを使いましょう。

Sample_1.php
namespace name1;

function getHoge() {
   return "hoge";
}

namespace name2;

function getHoge() {
   return "Boo";
}
Sample_2.php
require_once "Sample_1.php";

echo name1\getHoge();
echo name2\getHoge();
実行結果:hogeBoo

namespaceを宣言すると、その後に記述した関数はその名前空間の関数に属されます。
サンプルではname1とname2を宣言して、その直後に関数を記述しているため、name1のgetHoge()、name2のgetHoge()と区別されます。
Sample_2.phpで関数を呼び出すときは「名前空間\関数名」とすれば同一の関数を呼び出すことが出来ます。

useの使い方

名前空間を勉強していく中でもうひとつ出てくる単語がuseです。
ここではこのuseについて見ていきましょう。

useとは

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

書き方

use 名前空間または一部クラス関数定数など as 別名称;

※「as 別名称」 省略可

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

place.php
namespace asia\japan\tokyo\shibuya

function getName() {
    return "shibuya";
}

namespace asia\japan\tokyo\shinzyuku

function getName() {
    return "shinzyuku";
}

namespace asia\japan\tokyo\minato

function getName() {
    return "minato";
}
read.php
require_once "place.php";

use asia\japan\tokyo as name;

echo name\shibuya\getName();
echo "<br>";
echo name\shinzyuku\getName();
echo "<br>";
echo name\minato\getName();
実行結果:
shibuya
shinzyuku
minato

さいごに

namespace結構便利だわw

以上。間違っている点などございましたら連絡してください。
最後まで読んでいただきありがとうございました。

watataku8911
駆け出しのwebエンジニアです。
http://watataku.php.xdomain.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away