Maison >développement back-end >Problème PHP >L'éditeur vous guidera pour citer le nom de la classe (version php)

L'éditeur vous guidera pour citer le nom de la classe (version php)

醉折花枝作酒筹
醉折花枝作酒筹original
2021-07-30 14:00:001643parcourir

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 &#39;file1.php&#39;;

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

  • D'après l'exemple, nous pouvons voir que "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 :

Nom non qualifié ou nom de classe sans préfixe

, 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.

  • Avertissement : si la fonction ou la constante dans l'espace de noms n'est pas définie, la fonction ou le nom de la constante non qualifié sera résolu en la fonction globale ou le nom de la constante .

  • Noms qualifiés, ou noms contenant des préfixes, tels que $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. 🎜🎜
  • 🎜🎜Nom complet ou nom incluant un opérateur de préfixe global🎜, par exemple, $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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn