ホームページ > バックエンド開発 > PHPチュートリアル > PHP 名前空間の使用の基本

PHP 名前空間の使用の基本

伊谢尔伦
リリース: 2016-11-23 10:57:06
オリジナル
1097 人が閲覧しました

名前空間の使用方法について説明する前に、PHP がどの名前空間要素を使用するかをどのように認識するかを理解する必要があります。 PHP 名前空間とファイル システムの間で簡単に類推できます。ファイル システム内のファイルにアクセスするには、次の 3 つの方法があります:

foo.txt などの相対ファイル名形式。これは currentdirectory/foo.txt として解析されます。ここで、currentdirectory は現在のディレクトリを表します。したがって、現在のディレクトリが /home/foo の場合、ファイル名は /home/foo/foo.txt に解決されます。

相対パス名の形式は、subdirectory/foo.txtなどです。これは currentdirectory/subdirectory/foo.txt として解析されます。

絶対パス名は/main/foo.txtの形式です。これは /main/foo.txt として解析されます。

PHP 名前空間の要素も同じ原則を使用します。たとえば、クラス名は 3 つの方法で参照できます:

非修飾名、または $a=new foo(); や foo::staticmethod(); などのプレフィックスを含まないクラス名。現在の名前空間が currentnamespace の場合、foo は currentnamespacefoo に解決されます。 foo を使用するコードがグローバルであり、どの名前空間にもコードが含まれていない場合、foo は foo として解決されます。警告: ネームスペース内の関数または定数が未定義の場合、修飾されていない関数または定数名はグローバル関数または定数名に解決されます。

修飾名、または $a = new subnamespacefoo(); や subnamespacefoo::staticmethod(); などの接頭辞を含む名前。現在の名前空間が currentnamespace の場合、foo は currentnamespacesubnamespacefoo に解決されます。 foo を使用するコードがグローバルであり、コードがどの名前空間にも含まれていない場合、foo はサブ名前空間 foo に解決されます。

完全修飾名、またはグローバル接頭辞演算子を含む名前 ($a = new currentnamespacefoo(); または currentnamespacefoo::staticmethod(); など)。この場合、foo はコード内で常にリテラル名 currentnamespacefoo に解決されます。

以下はこれら 3 つのメソッドの使用例です:

file1.php:

<?php
    namespace Foo\Bar\subnamespace;
    const FOO = 1;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
?>
ログイン後にコピー

file2.php:

<?php
    namespace Foo\Bar;
    include &#39;file1.php&#39;;
    const FOO = 2;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
    /* 非限定名称 */
    foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
    foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。
    echo FOO; // resolves to constant Foo\Bar\FOO
    /* 限定名称 */
    subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
    subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,以及类的方法 staticmethod
    echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
    /* 完全限定名称 */
    \Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
    \Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
    echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
?>
ログイン後にコピー

グローバル クラス、関数、または定数にアクセスするには、次のような完全修飾名を使用できることに注意してください。 strlen() または例外または INI_ALL として。

例 #1 名前空間内のグローバル クラス、関数、定数にアクセスする

<?php
    namespace Foo;
    function strlen() {}
    const INI_ALL = 3;
    class Exception {}
    $a = \strlen(&#39;hi&#39;); // 调用全局函数strlen
    $b = \INI_ALL; // 访问全局常量 INI_ALL
    $c = new \Exception(&#39;error&#39;); // 实例化全局类 Exception
?>
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート