Lindelin

[特集]実はよく知らない PHP の新機能 その 1:名前空間

現代 PHP において、最も重要な新機能は、やはり名前空間だと思います。名前空間は PHP 5.3.0 から導入され、 その役割は、仮想組織階層に従って、PHP コードを整理することです。 その階層は、オペレーティングシステムのファイルシステムのディレクトリ構造に似ています。 名前空間は、よくあるクラス名の使用において、他のメーカーと同じクラス名の使用を避けるために、コンポーネントフレームワークのコードは、 各メーカーの唯一トップレベルの名前空間に置かれるということで、現代 PHP の部品の基礎となっています。 実際に、PHP のコンポーネントはどう置かれてるのか、見てみましょう。

Laravel フレームワークの中に、Http コンポーネントの役割は HTTP リクエスト及びレスポンスの管理です。 しかし、このコンポーネントは、よくあるクラス名を使用しています。例えば、Request や Response など。 こういったよくあるクラス名を使用している他のコンポーネントもたくさんあります。そうすると、他のコンポーネントと競合になります。 実際に、Laravel の Http コンポーネントは Illuminate というトップレベルの名前空間に置かれているので、我々は普通に使用できます。

https://github.com/laravel/framework/blob/master/src/Illuminate/Http/Response.php

<?php
namespace Illuminate\Http;
use ArrayObject;
use JsonSerializable;
use Illuminate\Contracts\Support\Jsonable;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Renderable;
use Symfony\Component\HttpFoundation\Response as BaseResponse;
class Response extends BaseResponse
{
    //
}
?>

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

上に述べたように、我々が書いたソースコードと他の開発者が書いたソースコードは同じクラス名、 インタフェース名、関数名及び定数名を使用している可能性があります。 名前空間を使用しないと、命名の競合による PHP エラーになって実行できなくなるのです。

もちろん、小規模のアプリケーションを 1 人で開発している場合には、 名前空間は必要ないかもしれません。 しかし、それ以外の人々にとっては、 名前空間を使用することでクラス構造をすっきりと体系化することができ、 もちろん、命名の競合を防ぐことができるようになります。 この 2 つの理由から、 多くのフレームワーク開発者は名前空間を採用するようになっています。

名前空間の使用法

名前空間の使用法は非常に簡単なので、ここで詳しく説明しません。参考:PHP マニュアル

<?php
// 宣言する方法。
namespace Lindelea\Support\Aws\Elb; // ここの「Lindelea」はトップレベルのメーカー名です。
use Illuminate\Support\ServiceProvider as IlluminateServiceProvider; // 別称の付け方
class ServiceProvider extends IlluminateServiceProvider
{
    //
}
?>

オートロード

名前空間は、PHP-FIG が取り決めた PSR-4 オートロード標準の基盤となっています。 現在、多くの PHP コンポーネントやフレームワークは PSR-4 オートロード標準を使用しています。 更に、依存関係管理ツール Composer を使うと、自動的に依存コンポーネントをロードしてくれます。 非常に便利です。これから、Composer と PHP-FIG について詳しく紹介させていただくので、 いまは名前空間の重要性を知るだけでいいです。

※本記事は『日本語ドキュメント作成スタイル基準規約』に基づいて作成されています


TOP