PHPの名前空間についておさらい

PHP
この記事は約3分で読めます。

この記事は、7年前に書かれました。

はじめに

PHP5.3から名前空間を利用できるようになりました。
同じクラス名や関数名でも、名前空間が異なればそれぞれ独立して扱うことができます。

名前空間の指定方法

PHP: 概要 - Manual

詳しくはドキュメントに書いていますが、さらっと要約して解説します。
まずは名前空間のないパターン。

<?php
class MyClass1{
    public static faunction Hello(){
        echo "Hello1";
    }
}

名前空間を指定した場合はこのようになります。namespaceという行が追加されただけです。

<?php
namespace app\MyClass1;

class MyClass1{
    public static faunction Hello(){
        echo "Hello 1";
    }
}

例えば、別ファイルに同名のClass名が存在した場合。下記は極端な例ですが、MyClass1が重複しています。しかし、名前空間をMyClass2としておくと、MyClass1は共存可能となります。

<?php
namespace app\MyClass2;

class MyClass1{
    public static faunction Hello(){
        echo "Hello 2";
    }
}

名前空間を指定した場合のクラスの呼び出し方法はこのとおりです。

require 'app/MyClass1.php';
require 'app/MyClass2.php';

\app\MyClass1::Hello();
\app\MyClass2::Hello();

useを使用した場合。asで別名(エイリアス)指定することも出来ますので、つらづらと長いパスを書かなくて済みます。

require 'app/MyClass1.php';
require 'app/MyClass2.php';

use app/MyClass1.php;
use app/MyClass2.php as MyClass2; //別名指定

\app\MyClass1::Hello();
MyClass2::Hello();

最後に

名前空間を利用することで、数名の開発時には衝突を避けることが出来ます。
しかし、当たり前ですが同じ名前空間を使用してはいけません。
useを使用すればrequire_onceを利用しなくてもよいと勘違いしそうですが、フレームワークなどはautoloadで一括して読み込んでいます。requireやrequire_onceはこれまでどおり必要です。
以上、簡単ですがPHPの名前空間についてのおさらいでした。