セクション 1: ネームスペースの概要
バージョン要件
PHP ではバージョン 5.3.0 からネームスペースが導入されています
ネームスペースとは何ですか?
PHP 公式マニュアルの例を引用します:
ファイル foo.txt は次のとおりです。ディレクトリ / は、home/greg と /home/other に同時に存在しますが、2 つの foo.txt ファイルは同じディレクトリに存在できません。さらに、ディレクトリ /home/greg の外にある foo.txt ファイルにアクセスする場合、/home/greg/foo.txt を取得するには、ファイル名の前にディレクトリ名とディレクトリ区切り文字を置く必要があります。この原則をプログラミングの分野に適用したのが、名前空間の概念です。
ネームスペースの役割
PHP では、ネームスペースは、クラス ライブラリやアプリケーションを作成するときにクラスや関数などの再利用可能なコードを作成するときに発生する 2 種類の問題を解決するために使用されます:
ユーザー作成コードと PHP 内部クラス間の名前の競合/関数/定数またはサードパーティのクラス/関数/定数。
非常に長い識別子名 (通常、最初の種類の問題を軽減するために定義される) のエイリアス (または短い) 名を作成し、ソース コードの可読性を向上させます。
ネームスペース構文の例
<?phpnamespace my\name; // 参考 "定义命名空间" 小节 class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; // 参考 "全局空间" 小节 $a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节 $d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节 $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); // 参考 "命名空间和动态语言特征" 小节?>
セクション 2 ネームスペースの定義
ネームスペースの定義
ネームスペースには、あらゆる正当な PHP コードを含めることができますが、ネームスペースの影響を受けるのは次のタイプのコードのみです。抽象クラスと特性を含む)、インターフェイス、関数、定数。
名前空間はキーワード名前空間を通じて宣言されます。ファイルに名前空間が含まれている場合は、declare キーワードを除く他のすべてのコードの前に名前空間を宣言する必要があります。
名前空間を宣言する前の唯一の正当なコードは、ソース ファイルのエンコード方法を定義する宣言ステートメントです。さらに、空白を含むすべての非 PHP コードを名前空間宣言の前に置くことはできません。
さらに、PHP の他の言語機能とは異なり、同じ名前空間を複数のファイルで定義できるため、同じ名前空間の内容を別のファイルに分割して保存することができます。
正しい名前空間の例:
<?phpnamespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
間違った名前空間の例:
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
サブ名前空間を定義する
ディレクトリとファイルの関係と同様に、PHP 名前空間でも階層的な名前空間名を指定できます。したがって、名前空間名を階層的に定義できます。
次の例では、定数 MyProjectSubLevelCONNECT_OK、クラス MyProjectSubLevelConnection、および関数 MyProjectSubLevelconnect を作成します。
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
同じファイル内で複数の名前空間を定義する
同じファイル内で複数の名前空間を定義することもできます。同じファイル内で複数の名前空間を定義するには、2 つの構文があります。
推奨される構文は、中括弧を使用して名前空間を定義することです。
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } }?>
実際のプログラミングの実践では、同じファイル内で複数の名前空間を定義することは強くお勧めできません。この方法は主に、同じファイル内の複数の PHP スクリプトを結合するために使用されます。
最初の宣言ステートメントを除き、名前空間の括弧の外側に PHP コードがあってはなりません。
上記は、Note 007 PHP 名前空間 - 前半部分の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。