PHP

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


はじめに

こんにちは、こんばんは。

ワタタクです。

今回は名前空間について見ていこうと思います。

正直なところ私、名前空間という概念をまったく理解しておりませんでした。

なので自分の勉強だと思い、一から書いていきたいと思います。


名前空間とは

※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

以上。間違っている点などございましたら連絡してください。

最後まで読んでいただきありがとうございました。