こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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)を使用する理由をまとめると次のようになります。
- クラス・関数・定数(const)・interfaceの命名の衝突によるErrorを回避するため。
- 他と明確に区別することができる。
- 独自性を保つことができる。
- クラス・関数・定数(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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!