エイリアスを介して外部完全修飾名を参照またはインポートできるようにすることは、名前空間の重要な機能です。これは、Unix のようなファイル システムで他のファイルまたはディレクトリへのシンボリック リンクを作成する方法に似ています。
PHP 名前空間は、エイリアスまたはインポートの 2 つの使用方法をサポートしています。クラス名にエイリアスを使用する方法と、名前空間名にエイリアスを使用する方法です。 PHP はインポートされた関数または定数をサポートしていないことに注意してください。
PHP では、エイリアスは演算子を使用して実装されます。以下は、インポートの 3 つの可能な方法すべてを使用した例です:
例 #1 use 演算子を使用してエイリアスをインポート/使用します
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use \ArrayObject; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 ?>
名前空間内の名前 (FooBar や For グローバル名などの名前空間区切り文字を含む完全修飾名を含む) には注意してください。名前空間区切り文字 (FooBar など) が含まれていない場合、インポートされる名前は完全修飾されている必要があり、現在のスペースの相対分析に基づいていないため、先頭のバックスラッシュは不要であり、許可されません。
操作を簡素化するために、PHP は 1 行での複数の use ステートメントもサポートしています
例 #2 use 演算子を使用してエイリアスをインポート/使用する場合、複数の use ステートメントが 1 行に含まれます
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func ?>
インポート操作はコンパイル中に実行されますただし、動的クラス名、関数名、または定数名はそうではありません。
例 #3 インポート名と動的名
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
また、インポート操作は非修飾名と修飾名にのみ影響します。完全修飾名は決定的であるため、インポートの影響を受けません。
例 #4 インポートと完全修飾名
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化My\Full\Classname类的对象 $obj = new \Another; // 实例化Another类的对象 $obj = new Another\thing; // 实例化My\Full\Classname\thing类的对象 $obj = new \Another\thing; // 实例化Another\thing类的对象 ?>