はじめに
こんにちは、こんばんは。
ワタタクです。
今回は名前空間について見ていこうと思います。
正直なところ私、名前空間という概念をまったく理解しておりませんでした。
なので自分の勉強だと思い、一から書いていきたいと思います。
名前空間とは
※phpの名前空間はver5.3から使用できます。
- namespaceとも呼ばれ、項目をカプセル化するときに使われます。
- 例えば同じファイルに同じクラスや同じ関数名、定数名が存在できませんが、名前空間を使うと関連するクラス、インターフェース、関数、定数などをグループ化することができます。
そのため、名前空間を指定しておけば自分が作ったクラスがサードパーティーのクラスや関数などと名前が衝突することを防ぐことが出来ます。
書き方
書き方は下記の方法。
namespace 名前空間;
注意)
- ソースコードの1番先頭で宣言する。
- namespaceの前にHTMLを書かない。
namespaceの使い方
ここでは、namespaceを使用しないで別々のファイルから同名の関数を呼び出したときの挙動と名前空間をを使ってどのように解決するかを見ていきます。
名前の衝突とは
以下のソースはエラーが発生します。
function getHoge() {
return "hoge";
}
function getHoge() {
return "Boo";
}
require_once "Sample_1.php";
echo getHoge();
実行結果:エラー
当然ですよね(笑)
なので、名前空間とやらを使いましょう。
namespace name1;
function getHoge() {
return "hoge";
}
namespace name2;
function getHoge() {
return "Boo";
}
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キーワードを使用して名前空間の一部を取得し、それぞれの名前空間の関数を呼び出す方法。
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";
}
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
以上。間違っている点などございましたら連絡してください。
最後まで読んでいただきありがとうございました。