Dans l'article précédent, nous avons découvert les sous-espaces de noms et comment définir des sous-espaces de noms. Si nécessaire, veuillez lire "Quel est le sous-espace de noms de l'espace de noms php ?" 》. Cette fois, nous allons vous présenter comment utiliser les noms de classes de référence. Vous pouvez vous y référer si nécessaire.
Regardons d’abord un exemple.
code de fichier file1.php
<?php namespace Foo\Bar\subnamespace; const FOO = 1; function foo() {} class foo { static function staticmethod() {} } ?>
code de fichier file2.php
<?php namespace Foo\Bar; include 'file1.php'; const FOO = 2; function foo() {} class foo { static function staticmethod() {} } /* 非限定名称 */ foo(); // 解析为函数 Foo\Bar\foo foo::staticmethod(); // 解析为类 Foo\Bar\foo ,方法为 staticmethod echo FOO; // 解析为常量 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 ?>
Regardons de plus près cet exemple. Dans cet exemple, le plus important est foo::staticmethod()
. , Avez-vous remarqué que quelle que soit l'utilisation que nous utilisons, nous devons utiliser "foo::staticmethod()
", mais qu'est-ce que cela signifie ? Découvrons-le en détail. foo::staticmethod()
,大家有没有看出来,不管是在哪一种用法中,我们都需要使用到“foo::staticmethod()
”,但这是什么意思呢?我们具体来了解一下。
根据例子我们可以看到“staticmethod()
”其实是一个静态方法的名称,而“foo::”是根据“foo()
”进行解析的。
PHP 命名空间中的类名可以通过三种方式引用:
非限定名称,或不包含前缀的类名称,例如“$c=new foo();
”或“foo::staticmethod();
”。如果当前命名空间是 space
,foo 将被解析为 spacefoo
。如果foo是全局代码,不包含在任何命名空间中的代码,则 foo 会被解析为foo。
警告:如果未定义命名空间中的函数或常量,则非限定函数名或常量名将解析为全局函数名或常量名。
限定名称,或包含前缀的名称,例如 $c = new espacefoo();
或 spacefoo::staticmethod();
。如果当前的命名空间是 space
,则 foo 会被解析为 spacespacefoo
。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析spacefoo
。
完全限定名称,或包含了全局前缀操作符的名称,例如, $c = new spacefoo();
或 spacefoo::staticmethod();
。在这种情况下,foo 总是被解析为代码中的文字名(literal name)spacefoo
staticmethod()
" est en fait le nom d'une méthode statique, et "foo::" est basé sur "foo()" analytique.
Les noms de classe dans l'espace de noms PHP peuvent être référencés de trois manières :
, par exemple "$c=new foo();" ou "foo::staticmethod();
". Si l'espace de noms actuel est space
, foo sera résolu en spacefoo
. Si foo est un code global, un code qui ne figure dans aucun espace de noms, alors foo sera analysé comme foo.
$c = new espacefoo();
ou spacefoo::staticmethod();
. Si l'espace de noms actuel est space
, alors foo sera résolu en spacespacefoo
. Si le code utilisant foo est global et ne contient de code dans aucun espace de noms, foo sera analysé spacefoo
. 🎜🎜$c = new spacefoo();
ou spacefoo::staticmethod() ;
. Dans ce cas, foo est toujours résolu en nom littéral (literal name)spacefoo
dans le code. 🎜🎜🎜🎜🎜Les fonctions avec des noms complets🎜 seront résolues au moment de la compilation lors de l'appel des classes et des constantes. 🎜🎜🎜Les noms non pleinement qualifiés🎜 seront convertis au moment de la compilation selon les règles d'importation. 🎜🎜Au sein d'un espace de noms, tous les noms qualifiés qui ne sont pas convertis selon les règles d'importation sont précédés du nom actuel de l'espace de noms. 🎜🎜C'est tout. Si vous voulez savoir autre chose, vous pouvez cliquer ici. → →🎜Tutoriel vidéo php🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!