名前空間の概要
名前空間とは何ですか?大まかに言えば、名前空間は物事をカプセル化する方法です。この抽象的な概念はさまざまな場所で見られます。たとえば、ディレクトリはオペレーティング システムで関連ファイルをグループ化するために使用され、ディレクトリ内のファイルの名前空間として機能します。たとえば、ファイル foo.txt はディレクトリ /home/greg と /home/other に同時に存在できますが、2 つの foo.txt ファイルが同じディレクトリに存在することはできません。さらに、ディレクトリ /home/greg の外にある foo.txt ファイルにアクセスする場合、/home/greg/foo.txt を取得するには、ファイル名の前にディレクトリ名とディレクトリ区切り文字を置く必要があります。この原則をプログラミングの分野に適用したのが、名前空間の概念です。
PHP では、クラス ライブラリやアプリケーションを作成するときにクラスや関数などの再利用可能なコードを作成するときに遭遇する 2 種類の問題を解決するために名前空間が使用されます。
ユーザーによって作成されたコードと PHP 内のクラス/関数 定数間または 3 番目の名前の競合パーティのクラス/関数/定数。
非常に長い識別子名 (通常、最初の種類の問題を軽減するために定義される) のエイリアス (または短い) 名を作成し、ソース コードの可読性を向上させます。
PHP 名前空間は、関連するクラス、関数、定数をグループ化する方法を提供します。以下は、PHP 名前空間構文を示す例です:
例 #1 名前空間構文の例
<?php namespace my\name; class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; $a = strlen('hi'); $d = namespace\MYCONST; $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); ?>
PHP は、5.3.0 以降のバージョンで名前空間をサポートします。
名前空間を定義する
正当な PHP コードはすべて名前空間に含めることができますが、名前空間の影響を受けるコードはクラス、関数、定数の 3 種類のみです。
名前空間はキーワード名前空間によって宣言されます。ファイルに名前空間が含まれている場合は、他のすべてのコードの前に名前空間を宣言する必要があります。
例 #1 単一の名前空間を宣言する
<?php namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
名前空間を宣言する前の唯一の有効なコードは、ソース ファイルのエンコーディングを定義する宣言ステートメントです。さらに、空白文字を含むすべての非 PHP コードを名前空間宣言の前に置くことはできません:
例 #2 単一の名前空間を宣言する
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
さらに、他の PHP 言語機能とは異なり、同じ名前空間を複数のファイルで定義できます。同じ名前空間の内容を分割して、異なるファイルに保存できます。
サブ名前空間を定義する
ディレクトリとファイルの関係と同様に、PHP 名前空間でも階層的な名前空間名を指定できます。したがって、名前空間名は階層的な方法で定義できます:
例 #1 階層的な単一の名前空間を宣言する
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
上記の例では、定数 MyProjectSubLevelCONNECT_OK、クラス MyProjectSubLevelConnection、および関数 MyProjectSubLevelConnection を作成します。