2
1

More than 1 year has passed since last update.

PHPにおける名前空間について改めて学習する

Posted at

PHPにおける名前空間について改めて学習する

PHPやLaravelを扱っているとほぼ必ず目にするのが名前空間。
なんとなくだった理解をもう少し深くするために今回まとめていきます。

名前空間とは

PHPにおける名前空間とは一言でいうと、プログラム内で同じクラス名や関数名を使用しても競合しないように区分けをすること

プログラムにおいて、同じ名前のクラスや関数を定義するとエラーが起こります。
競合しないためには、名前が被らないようにする必要があり、被らない長い名前にする必要がありますがそれだとソースコードの可読性が低くなってしまいます。
そこで名前空間を用いてあげます。

名前空間を用いることで、それぞれが独立した空間となり、
自由に名前をつけてあげることが可能となります。

別の空間に同じ名前のクラスや関数があったとしても競合することがありません。

名前空間の作り方

名前空間では、ソースコードの一番上部分にnamespaceというキーワードを使って指定してあげることができます。
このように記載をすると、TestGroupという名前空間を指定することになります。

test.php
<? php 

namespace TestGroup

名前空間を指定してあげたあとに下記のように関数を書いてあげることがほとんどですが
この場合testという関数はTestGroupに帰属することとなります。

どこにでもありそうなtestという関数ですが、
TestGroupという名前空間内に属し定義しているため他と競合することがなく使うことができます。

A.php
<? php 
namespace TestGroup

function test() {
    echo "Hello World";
}

名前空間の使い方

別ファイルなどから先程のファイル(A.php)を呼び出す場合以下のように記述します。

B.php
<? php 
require_once 'A.php';

TestGroup\test();
  • require_onceを使用してファイルを指定し読み込むことができる
  • 名前空間名\関数名;と指定することで、その名前空間の中にある関数を呼び出すことができます。

サブ名前空間

名前空間にはサブ名前空間というものもあります。

サブ名前空間は先程までの名前空間とは違い、階層を区切って細かく指定することができます。

C.php
<? php 
namespace TestGroup\Kokugo\bunpou;

実際の使い方は先程までの名前空間と変わりありません。

D.php
<? php 
require_once 'C.php';

TestGroup\Kokugo\bunpou;

useについて

サブ名前空間を使って名前空間の指定が長くなりすぎてしまうと、毎回の記述が面倒になってしまいます。
そんなときに使えるのがuseキーワードです。

このuseキーワードを使ってあげることでエイリアスを作成することができ、短い文で記述することが可能となります。

D.php
<? php 
require_once 'C.php';

use TestGroup\Kokugo\bunpou as bunpou;

bunpou\test();

エイリアスを使用することでつまり
TestGroup\Kokugo\bunpou\test()bunpou\test() は同じ意味となります。

Laravelでの名前空間について

Laravelではコントローラを作成すると自動で名前空間が作成されます。

TestController.php
<?php

namespace App\Http\Controllers;

つまり、APP配下にあるHttpディレクトリ内にあるControllersディレクトリにあるTestController.phpだよということになります。
ただなんとなくnamespaceという記述があるなーという認識ではなく、これがどういう意味のものなのか理解することが重要ですね。

以上

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1