PHPの名前空間(namespace)とuse宣言とは? 意味と使い方まとめ

PHP_namespace_use

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPの名前空間(namespace)とuse宣言とは? 意味と使い方をまとめて解説していきます。

PHPの名前空間(namespace)とuse宣言とは?

名前空間(namespace)とは、項目をカプセル化して、命名の衝突によるErrorを回避したり、独自性を保つために使用します。

また、名前空間は、クラスや関数・定数(const)・interfaceなどを外部ファイルから参照(useで使用するなど)できるようにするためのPathとして機能します。

use宣言は、PHPファイル中で外部の名前空間のデータにアクセスするための記述で、

指定した名前空間(namespace)のクラスや関数・定数(const)・interfaceなどをインポートすることができます。

名前空間(namespace)の特徴・要点

通常、同じ関数名やクラス名、定数名は、同じファイルに存在することはできません。

しかし、名前空間(namespace)を使用することにより、関連するクラス・関数・定数(const)・interfaceをカプセル化して、グループ化することが可能です。

その名前空間Groupに属するデータとしてクラスや関数を定義するので、命名の衝突によるErrorを回避できるという訳です。

ちなみに、クラス・関数・定数(const)・interfaceが、名前空間(namespace)の影響を受けます。

また、名前空間(namespace)の前にHTMLを記述するとエラーになるので、注意が必要です。

なぜ名前空間(namespace)を使用するのか?

名前空間(namespace)を使用する理由をまとめると次のようになります。

  1. クラス・関数・定数(const)・interfaceの命名の衝突によるErrorを回避するため。
    • 他と明確に区別することができる。
    • 独自性を保つことができる。
  2. クラス・関数・定数(const)・interfaceなどをグループ化するため。
    • クラス・関数・定数(const)・interfaceなどを名前空間でグルーピングすることができる。

名前空間(namespace)の使い方・宣言方法

名前空間(namespace)の特徴や意味を理解した上で、実践編に入っていきます。

次のnamespace.phpファイルでは、2つのnamespace(名前空間)を定義しています。

<?php

// 1. namespace(名前空間)を定義する
// => 外部から参照する(useで使用する)際のPathになる
namespace App\ItemController;

class Item {
    protected int $id;
    protected string $name;
    protected int $price;
    public function __construct($id, $name, $price) {
        $this->id = $id;
        $this->name = $name;
        $this->price = $price;
    }
    public function GetName (): string {
        return $this->name;
    }
    public function GetPrice (): string {
        return number_format($this->price) . '円';
    }
}

function LikeBookTitle (): string
{
    return 'ぷるぷるロボ玉の逆襲';
}
// ここまでが、1つ目の名前空間の適用範囲

// 2. ここから別のnamespace(名前空間)を定義している
namespace App\GunmarController;

// 3. 同じ名前の関数を定義することができる!
function LikeBookTitle (): string
{
    return '神聖グンマー帝国の歴史';
}

const ROBOTAMA = 'ロボ玉';

名前空間(namespace)からアクセスする方法とuse宣言の使い方

それでは、先ほどのnamespace.phpファイルで定義してある名前空間(namespace)にアクセスしてデータを取得してみます。

<?php

// 外部のファイルを読み込む
require_once __DIR__ . '/namespace.php';

// 1.「 名前空間名\クラス名 」と記述して、名前空間(namespace)からアクセスする
$php_book = new App\ItemController\Item(1, 'PHP入門', 3000);
echo $php_book->GetName(), 'の金額は、', $php_book->GetPrice(), "\n";
// PHP入門の金額は、3,000円

// 2. use文章は、使用するクラス名を指定する => 「 use 名前空間\使用するクラス名 」
use App\ItemController\Item;

$java_script_book = new Item(2, 'JavaScript入門', 12000);
echo $java_script_book->GetName(), 'の金額は、', $java_script_book->GetPrice(), "\n";
// JavaScript入門の金額は、12,000円


// 3. as を使用して、エイリアス(別名)を付与して、使用することもできる
use App\ItemController\Item as Book;

$python_book = new Book(3, 'Python入門', 15000);
echo $python_book->GetName(), 'の金額は、', $python_book->GetPrice(), "\n";
// Python入門の金額は、15,000円

// 4. 名前空間(namespace)から関数を呼び出す
echo App\ItemController\LikeBookTitle(), "\n";
// ぷるぷるロボ玉の逆襲

use App\GunmarController as Gunmar;
echo Gunmar\LikeBookTitle(), "\n";
// 神聖グンマー帝国の歴史

// 5. 名前空間(namespace)から定数(const)を呼び出す
echo App\GunmarController\ROBOTAMA;

// 6. 名前空間が別なので、Error!
echo App\ItemController\ROBOTAMA;

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

参考・引用

  1. 【PHP超入門】名前空間(namespace・use)について

最近の投稿