ホームページ >バックエンド開発 >PHPチュートリアル >PHP の名前空間
概要
名前空間の役割は、名前の競合を解決することです
名前空間を定義します正当な PHP コードを名前空間に含めることができますが、名前空間の影響を受けるのは次の種類のコードのみです。 クラス (抽象化クラスと特性を含む) )、インターフェイス、関数、定数。
名前空間はキーワード namespace で宣言されます。ファイルに名前空間が含まれている場合は、declare キーワードを除く他のすべてのコードの前に名前空間を宣言する必要があります。
名前空間を宣言する前の唯一の正当なコードは、ソース ファイルのエンコード方法を定義する宣言ステートメントです。さらに、空白文字を含むすべての非 PHP コードは、名前空間宣言の前に出現することはできません
同じ名前空間を複数のファイルで定義できるため、同じ名前空間の内容を分割して異なるファイルに保存できます。
サブ名前空間を定義するnamespace MyProject\Sub\Level;同じファイル内で複数の名前空間を定義する
<?phpnamespace MyProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }namespace AnotherProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }?>
この構文を使用して 1 つのファイル内で複数の名前空間を定義することはお勧めできません。次の中括弧形式の構文を使用することをお勧めします
<?phpnamespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }}namespace AnotherProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }}?>
実際のプログラミングの実践では、同じファイル内で複数の名前空間を定義することは強くお勧めできません。この方法は主に、同じファイル内の複数の PHP スクリプトを結合するために使用されます。
名前空間の使用名前空間内の要素には、相対パスと絶対パスを通じてアクセスできます
file1.php
<?phpnamespace Foo\Bar\subnamespace;const FOO = 1;function foo() {}class foo{ static function staticmethod() {}}?>
file2.php
<?phpnamespace Foo\Bar;include 'file1.php';const FOO = 2;function foo() {}class foo{ static function staticmethod() {}}/* 非限定名称 */foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foofoo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。resolves to class Foo\Bar\foo, method staticmethodecho FOO; // resolves to constant Foo\Bar\FOO/* 限定名称 */subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foosubnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo, // 以及类的方法 staticmethodecho subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO/* 完全限定名称 */\Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo\Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethodecho \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO?>
名前空間が定義されていない場合、すべてのクラスと関数が定義されますPHP が名前空間の概念を導入する前と同じように、グローバル空間で。名前の前に付けると、その名前が他の名前空間にある場合でも、その名前がグローバル空間の名前であることを示します
名前空間で、PHP が修飾されていないクラス、関数、または定数名を検出すると、異なる優先順位戦略を使用して、名前。クラス名は常に現在の名前空間内の名前に解決されます。したがって、システムの内部にあるクラス名、または名前空間に含まれていないクラス名にアクセスする場合は、完全修飾名を使用する必要があります
クラス名にはエイリアス、インターフェイスにはエイリアス、または名前空間名にはエイリアスを使用します。 PHP 5.6 では、関数または定数をインポートしたり、それらのエイリアスを設定したりできます。
エイリアスは演算子 use によって実装されます
<?phpnamespace foo;use My\Full\Classname as Another;// 下面的例子与 use My\Full\NSname as NSname 相同use My\Full\NSname;// 导入一个全局类use ArrayObject;// importing a function (PHP 5.6+)use function My\Full\functionName;// aliasing a function (PHP 5.6+)use function My\Full\functionName as func;// importing a constant (PHP 5.6+)use const My\Full\CONSTANT;?>
1 行に複数の use ステートメントが含まれます
<?phpuse My\Full\Classname as Another, My\Full\NSname;$obj = new Another; // 实例化 My\Full\Classname 对象NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func?>
著作権表示: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。