PHPにおける名前空間について改めて学習する
PHPやLaravelを扱っているとほぼ必ず目にするのが名前空間。
なんとなくだった理解をもう少し深くするために今回まとめていきます。
名前空間とは
PHPにおける名前空間とは一言でいうと、プログラム内で同じクラス名や関数名を使用しても競合しないように区分けをすること
。
プログラムにおいて、同じ名前のクラスや関数を定義するとエラーが起こります。
競合しないためには、名前が被らないようにする必要があり、被らない長い名前にする必要がありますがそれだとソースコードの可読性が低くなってしまいます。
そこで名前空間を用いてあげます。
名前空間を用いることで、それぞれが独立した空間となり、
自由に名前をつけてあげることが可能となります。
別の空間に同じ名前のクラスや関数があったとしても競合することがありません。
名前空間の作り方
名前空間では、ソースコードの一番上部分にnamespace
というキーワードを使って指定してあげることができます。
このように記載をすると、TestGroupという名前空間を指定することになります。
<? php
namespace TestGroup
名前空間を指定してあげたあとに下記のように関数を書いてあげることがほとんどですが
この場合testという関数はTestGroupに帰属することとなります。
どこにでもありそうなtestという関数ですが、
TestGroupという名前空間内に属し定義しているため他と競合することがなく使うことができます。
<? php
namespace TestGroup
function test() {
echo "Hello World";
}
名前空間の使い方
別ファイルなどから先程のファイル(A.php)を呼び出す場合以下のように記述します。
<? php
require_once 'A.php';
TestGroup\test();
-
require_once
を使用してファイルを指定し読み込むことができる -
名前空間名\関数名;
と指定することで、その名前空間の中にある関数を呼び出すことができます。
サブ名前空間
名前空間にはサブ名前空間
というものもあります。
サブ名前空間は先程までの名前空間とは違い、階層を区切って細かく指定することができます。
<? php
namespace TestGroup\Kokugo\bunpou;
実際の使い方は先程までの名前空間と変わりありません。
<? php
require_once 'C.php';
TestGroup\Kokugo\bunpou;
useについて
サブ名前空間を使って名前空間の指定が長くなりすぎてしまうと、毎回の記述が面倒になってしまいます。
そんなときに使えるのがuse
キーワードです。
このuse
キーワードを使ってあげることでエイリアスを作成することができ、短い文で記述することが可能となります。
<? php
require_once 'C.php';
use TestGroup\Kokugo\bunpou as bunpou;
bunpou\test();
エイリアスを使用することでつまり
TestGroup\Kokugo\bunpou\test()
と bunpou\test()
は同じ意味となります。
Laravelでの名前空間について
Laravelではコントローラを作成すると自動で名前空間が作成されます。
<?php
namespace App\Http\Controllers;
つまり、APP配下にあるHttpディレクトリ内にあるControllersディレクトリにあるTestController.phpだよということになります。
ただなんとなくnamespaceという記述があるなーという認識ではなく、これがどういう意味のものなのか理解することが重要ですね。
以上