【PHP】PHPの名前空間の考え方や使い方(namespace, use)について

PHP

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という名前空間にソースコードを登録することができます。

PHP

Posted by devsakaso