【PHP】PHPの名前空間の考え方や使い方(namespace, use)について
PHPの名前空間の考え方や使い方について紹介します。
名前空間とは
名前空間とは、ソースコードを格納する場所、その考え方のことです。
PHPではrequire()などを使うことで、ファイルを分割して動作させることができます。
require()については、【PHP】ファイルの分割方法とrequire、include、require_once、function_existsの使い方を参照してみてください。
しかし関数などが被ってしまう問題があるため、名前空間というソースコードを名前のついた空間に配置していくことで問題を解消します。
名前空間に登録する
<?php
// 名前空間の名前を指定
namespace space1;
//これはdefine()のため名前空間に登録されない
define('MAX_VALUE', 100);
// constなのでspace1という名前空間に登録される
const MIN_VALUE = 10;
function func() {
echo '名前空間';
}
namespaceキーワードによって、名前空間の名前を指定することができます。
関数、定数、クラスといったものがこの名前空間に配置されることになります。
ただし、define()を使うと名前空間には登録されません。
名前空間に登録された関数、定数などを使う(バックスラッシュでパスを指定)
index.phpからspace1.phpというファイルをrequire()して名前空間の関数や定数を使いたいとします。
使う方法は、バックスラッシュでパスを指定する方法と、useを使う方法があります。
まずは、バックスラッシュでパスを指定する方法を紹介します。
<?php
// まずはファイルを読み込む
require_once 'space1.php';
// 名前空間の関数を使う場合
\space1\func();
// 名前空間の定数を使う場合
echo \space1\MIN_VALUE;
名前空間の関数などを使用する場合、まずはファイルを読み込みます。
そして、使うときはバックスラッシュで名前空間を指定します。
名前空間に登録された関数、定数などを使う(use)
<?php
// まずはファイルを読み込む
require_once 'space1.php';
// 名前空間の関数を使う場合
use function space1\func;
// 実行時にはバックスラッシュの部分が不要になる
func();
// 名前空間の定数を使う場合
use const space1\MIN_VALUE;
echo MIN_VALUE;
useを使う場合はuseのあとに関数ならfunctionと続けて名前空間\関数を指定します。
先頭のバックスラッシュは、名前空間のグローバル空間を意味するので、useの場合は不要です。
関数を実行するときにはバックスラッシュが不要になります。
定数も同様でunseのあとにconstをつけ、先頭のバックスラッシュなしで名前空間\定数名と指定します。
同じ名前空間に登録したものは名前空間の指定は不要
同じ名前空間に登録したものは名前空間の指定は不要になります。
<?php
// 名前空間の名前を指定
namespace space2;
const MIN_VALUE = 10;
function func() {
echo MIN_VALUE;
}
space2という同じ名前空間のため、名前空間の指定は不要です。
別の名前空間のものは、名前空間を指定する必要があります。
グローバル空間の場合は、クラス以外は指定する必要がありません。
グローバル空間は、バックスラッシュで表すことができます。
グローバル空間に登録されたクラスだけは、使うときはバックスラッシュありで使用する必要があります。
名前空間は階層にできる
<?php
namespace docs\chapter1;
上のようにすると、docsという名前空間のchapter1という名前空間にソースコードを登録することができます。