Heim > Backend-Entwicklung > PHP-Problem > Der Editor wird Sie anleiten, den Klassennamen anzugeben (PHP-Version).

Der Editor wird Sie anleiten, den Klassennamen anzugeben (PHP-Version).

醉折花枝作酒筹
Freigeben: 2023-03-11 20:52:01
Original
1649 Leute haben es durchsucht

Im vorherigen Artikel haben wir etwas über Sub-Namespaces und die Definition von Sub-Namespaces gelernt. Lesen Sie bei Bedarf bitte „Was ist der Sub-Namespace des PHP-Namespace?“ 》. Dieses Mal stellen wir Ihnen die Verwendung von Referenzklassennamen vor. Sie können bei Bedarf darauf verweisen.

Schauen wir uns zunächst ein Beispiel an.

file1.php-Dateicode

<?php
namespace Foo\Bar\subnamespace; 

const FOO = 1;
function foo() {}
class foo
{
    static function staticmethod() {}
}
?>
Nach dem Login kopieren

file2.php-Dateicode

<?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
?>
Nach dem Login kopieren

Sehen wir uns dieses Beispiel genau an. In diesem Beispiel ist foo::staticmethod() das prominenteste , Ist Ihnen aufgefallen, dass wir unabhängig von der Verwendung „foo::staticmethod()“ verwenden müssen, aber was bedeutet das? Lassen Sie es uns im Detail herausfinden. 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

  • Anhand des Beispiels können wir sehen, dass „staticmethod()“ tatsächlich der Name einer statischen Methode ist und „foo::“ auf „foo()" Analytisch.

Klassennamen im PHP-Namespace können auf drei Arten referenziert werden:

Unqualifizierter Name oder Klassenname ohne Präfix

, Zum Beispiel „$c=new foo();" oder "foo::staticmethod();". Wenn der aktuelle Namespace space ist, wird foo in spacefoo aufgelöst. Wenn foo globaler Code ist, also Code, der in keinem Namespace enthalten ist, wird foo als foo analysiert.

  • Warnung: Wenn die Funktion oder Konstante im Namespace nicht definiert ist, wird der unqualifizierte Funktions- oder Konstantenname in den globalen Funktions- oder Konstantennamen aufgelöst .

  • Qualifizierte Namen oder Namen mit Präfixen, wie zum Beispiel $c = new espacefoo(); oder spacefoo::staticmethod();. Wenn der aktuelle Namespace space ist, wird foo in spacespacefoo aufgelöst. Wenn der Code, der foo verwendet, global ist und nicht in einem Namespace-Code enthalten ist, wird foo als spacefoo analysiert. 🎜🎜
  • 🎜🎜Vollständig qualifizierter Name oder ein Name, der einen globalen Präfixoperator enthält🎜, zum Beispiel $c = new spacefoo(); oder spacefoo::staticmethod() ; . In diesem Fall wird foo im Code immer in den Literalnamen (literal name)spacefoo aufgelöst. 🎜🎜🎜🎜🎜Funktionen mit vollständig qualifizierten Namen🎜 werden beim Aufrufen von Klassen und Konstanten zur Kompilierungszeit aufgelöst. 🎜🎜🎜Nicht vollständig qualifizierte Namen🎜 werden zur Kompilierzeit gemäß den Importregeln konvertiert. 🎜🎜Innerhalb eines Namensraums wird allen qualifizierten Namen, die nicht gemäß Importregeln konvertiert werden, der aktuelle Namensraumname vorangestellt. 🎜🎜Das ist alles. Wenn Sie noch etwas wissen möchten, können Sie hier klicken. → →🎜php-Video-Tutorial🎜🎜

Das obige ist der detaillierte Inhalt vonDer Editor wird Sie anleiten, den Klassennamen anzugeben (PHP-Version).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage