一連の記事の第1部と第2部では、名前空間の基本 、および名前を解析するためのインポート、エイリアス、ルールについて説明しました 。 この最後の記事では、より高度な名前空間オプションについて説明します。
__NAMESPACE__定数
__NAMESPACE__は、常に現在のネームスペース名を返すPHP文字列です。 グローバル空間では、常に空の文字列になります。
<?php namespace App\Lib1; echo __NAMESPACE__; // outputs: App\Lib1 ?>
その値には、デバッグ中に明らかな利点があります。 また、次のように、完全修飾クラス名を動的に生成するためにも使用できます。
<?php namespace App\Lib1; class MyClass { public function WhoAmI() { return __METHOD__; } } $c = __NAMESPACE__ . '\\MyClass'; $m = new $c; echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI ?>
キーワード名前空間
namespaceキーワードを使用して、現在のネームスペースまたはネームスペース内の位置ソースを明示的に示す(リンクを指定する)ことができます。 名前空間と同等-クラスのselfキーワード:
<?php namespace App\Lib1; class MyClass { public function WhoAmI() { return __METHOD__; } } $m = new namespace\MyClass; echo $m->WhoAmI(); // outputs: App\Lib1\MyClass::WhoAmI ?>
名前空間クラスの自動ロード
PHP 5で時間を節約する最適な機能の1つは自動ロードです。 グローバル(名前空間に割り当てられていない)PHPコードでは、標準のautoload関数は次のように記述できます。
<?php $obj1 = new MyClass1(); // classes/MyClass1.php is auto-loaded $obj2 = new MyClass2(); // classes/MyClass2.php is auto-loaded // autoload function function __autoload($class_name) { require_once("classes/$class_name.php"); } ?>
PHP 5.3では、名前空間クラスをインスタンス化できます。 この状況では、完全修飾された名前空間名とクラス名が__autoload関数に渡されます。たとえば、 $ class_nameの値は「 App \ Lib1 \ MyClass 」になります。 PHPクラスファイルを引き続き同じフォルダーに配置し、文字列から名前空間を選択できますが、ファイル名の競合が発生する可能性があります。
または、クラスのファイル階層は、名前空間の構造と同じ方法で編成できます。 たとえば、 MyClass.phpファイルは/ classes / App / Lib1フォルダーに作成できます 。
/classes/App/Lib1/MyClass.php:
<?php namespace App\Lib1; class MyClass { public function WhoAmI() { return __METHOD__; } } ?>
ルートディレクトリにあるファイルは、次のコードで使用できます。
myapp.php:
<?php use App\Lib1\MyClass as MC; $obj = new MC(); echo $obj->WhoAmI(); // autoload function function __autoload($class) { // convert namespace to full file path $class = 'classes\' . str_replace('\\', '/', $class) . '.php'; require_once($class); } ?>
説明:
- クラスApp \ Lib1 \ MyClassに MCエイリアスを使用します
- コンパイル時に、 新しいMC()は新しいApp \ Lib1 \ MyClass()に変換されます。
- 文字列「 App \ Lib1 \ MyClass 」が__autoload関数に渡されます。 これにより、名前空間のすべてのバックスラッシュがファイルパスのスラッシュに置き換えられ、ファイル「 classes \ App \ Lib1 \ MyClass.php 」がロードされるように行が変更されます。
PHP名前空間に関するこの一連の記事が役に立つことを願っています。 PHPコードで名前空間を使用しますか?
また読む:
PHPで名前空間を使用する方法、パート1:基本
PHPで名前空間を使用する方法、パート2:インポート、エイリアス、解析ルール
注:
A /翻訳作業中に別の用語を探していたときに、 ここで同じ3番目の部分を見つけましたが、すでに翻訳されています。 私の意見では、その翻訳にはかなり重大なエラーが含まれています。
namespaceキーワードを使用すると、現在のネームスペースとクラス内のselfに似たサブスペースを明確にリンクできます。
私の翻訳:
namespaceキーワードを使用して、現在のネームスペースまたはネームスペース内の位置ソースを明示的に示す(リンクを指定する)ことができます。 名前空間と同等-クラスのselfキーワード
B /メモ、修正、不正確さの表示など - ようこそ !