Heim Backend-Entwicklung PHP-Tutorial Regeln für die Auflösung von PHP-Namespaces

Regeln für die Auflösung von PHP-Namespaces

Jul 29, 2016 am 09:12 AM
namespace new

PHP-Namespace-Auflösungsregeln

Namespace-Namensdefinition

Unqualifizierter NameUnqualifizierter Name

<code>名称中不包含命名空间分隔符的标识符,例如Foo
</code>
Nach dem Login kopieren

Qualifizierter NameQualifizierter Name

<code>名称中含有命名空间分隔符的标识符,例如:Foo\Bar
</code>
Nach dem Login kopieren

Vollständig Qualifizierter Name

<code>名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如:\Foo\Bar.
namespace\Foo 也是一个完全限定名称。
</code>
Nach dem Login kopieren

Die Namensauflösung folgt den folgenden Regeln

  1. Aufrufe von Funktionen, Klassen und Konstanten mit vollständig qualifizierten Namen werden zur Kompilierungszeit aufgelöst. Beispielsweise wird „Neu AB“ in die Klasse „AB“ aufgelöst.
  2. Alle unqualifizierten Namen und qualifizierten Namen (nicht vollständig qualifizierte Namen) werden zur Kompilierzeit gemäß den aktuellen Importregeln konvertiert. Wenn beispielsweise der Namespace ABC als C importiert wird, werden Aufrufe von CDe() in ABCDe() konvertiert.
  3. Innerhalb eines Namespace wird allen qualifizierten Namen, die nicht gemäß Importregeln konvertiert werden, der aktuelle Namespace-Name vorangestellt. Wenn beispielsweise CDe() innerhalb des Namespace AB aufgerufen wird, wird CDe() in ABCDe() konvertiert.
  4. Unqualifizierte Klassennamen werden zur Kompilierzeit gemäß den aktuellen Importregeln konvertiert (vollständige Namen werden anstelle von kurzen Importnamen verwendet). Wenn beispielsweise der Namespace ABC als C importiert wird, wird das neue C() in das neue ABC() konvertiert.
  5. Innerhalb eines Namensraums (z. B. AB) werden Funktionsaufrufe an unqualifizierte Namen zur Laufzeit aufgelöst. Ein Aufruf der Funktion foo() wird beispielsweise wie folgt analysiert:
    1. Suchen Sie eine Funktion namens ABfoo() im aktuellen Namespace
    2. Versuchen Sie, die globale Space-Funktion zu finden und aufzurufen foo() in .
  6. Aufrufe an unqualifizierte Namen oder qualifizierte Namensklassen (nicht vollständig qualifizierte Namen) innerhalb eines Namespace (z. B. AB) werden zur Laufzeit aufgelöst. Das Folgende ist der Parsing-Prozess zum Aufrufen von new C() und new DE():

    Parsen von new C():

    1. Suchen Sie die ABC-Klasse in der aktuellen namespace;

    2. Versuchen Sie, die Klasse ABC automatisch zu laden.

    Parsing von neuem DE():

    1. Fügen Sie den aktuellen Namespace-Namen vor dem Klassennamen hinzu, um ABDE zu erhalten, und suchen Sie dann für die Klasse

    2. Versuchen Sie, die Klasse ABDE automatisch zu laden.

    Um auf eine globale Klasse im globalen Namensraum zu verweisen, muss der vollqualifizierte Name new C() verwendet werden.

Beispiel zur Namensauflösung

<code><?php
namespace A;
use B\D, C\E as F;

// 函数调用

foo();      // 首先尝试调用定义在命名空间"A"中的函数foo()
            // 再尝试调用全局函数 "foo"

\foo();     // 调用全局空间函数 "foo" 

my\foo();   // 调用定义在命名空间"A\my"中函数 "foo" 

F();        // 首先尝试调用定义在命名空间"A"中的函数 "F" 
            // 再尝试调用全局函数 "F"

// 类引用

new B();    // 创建命名空间 "A" 中定义的类 "B" 的一个对象
            // 如果未找到,则尝试自动装载类 "A\B"

new D();    // 使用导入规则,创建命名空间 "B" 中定义的类 "D" 的一个对象
            // 如果未找到,则尝试自动装载类 "B\D"

new F();    // 使用导入规则,创建命名空间 "C" 中定义的类 "E" 的一个对象
            // 如果未找到,则尝试自动装载类 "C\E"

new \B();   // 创建定义在全局空间中的类 "B" 的一个对象
            // 如果未发现,则尝试自动装载类 "B"

new \D();   // 创建定义在全局空间中的类 "D" 的一个对象
            // 如果未发现,则尝试自动装载类 "D"

new \F();   // 创建定义在全局空间中的类 "F" 的一个对象
            // 如果未发现,则尝试自动装载类 "F"

// 调用另一个命名空间中的<strong>静态方法</strong>或命名空间函数

B\foo();    // 调用命名空间 "A\B" 中函数 "foo"

B::foo();   // 调用命名空间 "A" 中定义的类 "B" 的 "foo" 方法
            // 如果未找到类 "A\B" ,则尝试自动装载类 "A\B"

D::foo();   // 使用导入规则,调用命名空间 "B" 中定义的类 "D" 的 "foo" 方法
            // 如果类 "B\D" 未找到,则尝试自动装载类 "B\D"

\B\foo();   // 调用命名空间 "B" 中的函数 "foo" 

\B::foo();  // 调用全局空间中的类 "B" 的 "foo" 方法
            // 如果类 "B" 未找到,则尝试自动装载类 "B"

// 当前命名空间中的<strong>静态方法</strong>或函数

A\B::foo();   // 调用命名空间 "A\A" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\A\B" 未找到,则尝试自动装载类 "A\A\B"

\A\B::foo();  // 调用命名空间 "A\B" 中定义的类 "B" 的 "foo" 方法
              // 如果类 "A\B" 未找到,则尝试自动装载类 "A\B"
?>
</code>
Nach dem Login kopieren
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

Das Obige stellt die Parsing-Regeln für PHP-Namespaces vor, einschließlich statischer Methoden. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Namespace-Zusammenführung in PHP8.0 Namespace-Zusammenführung in PHP8.0 May 14, 2023 am 08:43 AM

Mit der kontinuierlichen Weiterentwicklung der Technologie wird die PHP-Sprache ständig aktualisiert und verbessert. PHP8.0 ist als neueste Version der PHP-Sprache leistungsfähiger als frühere Versionen. Eine ihrer wichtigen Funktionen ist die Namensraumzusammenführung. Was ist also die Zusammenführung von Namespaces? Was nützt es? Lassen Sie uns dies weiter unten im Detail besprechen. Namespace ist ein Namespace in PHP, der zur Unterscheidung verschiedener Codes verwendet wird. Er ermöglicht uns die Verwendung von Klassen, Funktionen oder Konstanten mit demselben Namen im Code. in früheren Versionen

So entfernen Sie den Stickynotes-Namespace So entfernen Sie den Stickynotes-Namespace Dec 27, 2023 pm 01:51 PM

Wenn wir das Win7-System verwenden, finden wir ein Stickynotes-Tool. Stickynotes funktioniert eigentlich wie ein elektronischer Notizblock. Wenn Sie Wörter löschen möchten, müssen Sie es in der Systemsteuerung deinstallieren. Was ist ein StickyNotes-Namespace und wie kann man ihn löschen? Methode 1: Suchen und später auf „Löschen“ klicken Mit dem auf dem Desktop schwebenden System ist es für Benutzer bequem, wichtige Dinge aufzuschreiben. Normalerweise befindet sich die Software im verborgenen Zustand. Bei Bedarf kann sie zu einem bestimmten Zeitpunkt herausspringen und Benutzer daran erinnern.

Was ist der Unterschied zwischen make und new in der Go-Sprache? Was ist der Unterschied zwischen make und new in der Go-Sprache? Jan 09, 2023 am 11:44 AM

Unterschiede: 1. Make kann nur zum Zuweisen und Initialisieren von Daten der Typen Slice, Map und Chan verwendet werden, während new jeden Datentyp zuordnen kann. 2. Die neue Zuweisung gibt einen Zeiger vom Typ „*Type“ zurück, während make eine Referenz vom Typ „Type“ zurückgibt. 3. Der von new zugewiesene Speicherplatz wird gelöscht. Nachdem make den Speicherplatz zugewiesen hat, wird er initialisiert.

So verwenden Sie das neue Schlüsselwort in Java So verwenden Sie das neue Schlüsselwort in Java May 03, 2023 pm 10:16 PM

1. Konzept In der Java-Sprache ist der „neue“ Ausdruck für die Erstellung einer Instanz verantwortlich. Der Konstruktor wird aufgerufen, um die Instanz zu initialisieren „Objektreferenz“, aber der Wert des neuen Ausdrucks ist eine Referenz auf das neu erstellte Objekt. 2. Zweck: Erstellen Sie ein Objekt einer neuen Klasse. 3. Arbeitsmechanismus: Allokieren Sie Speicherplatz für Objektmitglieder und geben Sie Standardwerte explizit an, führen Sie Konstruktionsmethodenberechnungen durch und geben Sie häufig Referenzwerte zurück bedeutet, neue im Speicher zu öffnen. Der Speicherplatz wird im Heap-Bereich im Speicher zugewiesen. Er wird von JVM gesteuert und verwaltet den Speicher. Hier verwenden wir die String-Klasse als Beispiel. Pu

Wie verwende ich den NameSpace von PHP7 und verwende Schlüsselwörter, um die Struktur des Codes zu organisieren? Wie verwende ich den NameSpace von PHP7 und verwende Schlüsselwörter, um die Struktur des Codes zu organisieren? Oct 19, 2023 am 08:07 AM

Wie verwende ich den NameSpace von PHP7 und verwende Schlüsselwörter, um die Struktur des Codes zu organisieren? Einleitung: Bei der Softwareentwicklung ist die Organisationsstruktur des Codes sehr wichtig. Sie steht in direktem Zusammenhang mit der Lesbarkeit, Wartbarkeit und Skalierbarkeit des Codes. Mit der kontinuierlichen Iteration der PHP-Versionen führte PHP7 die Schlüsselwörter NameSpace und Use ein, die uns mehr Flexibilität und Komfort bieten. In diesem Artikel wird erläutert, wie Sie den NameSpace von PHP7 verwenden und Schlüsselwörter verwenden, um die Struktur des Codes zu organisieren und spezifischen Code bereitzustellen

Wie funktioniert der neue Operator in js? Wie funktioniert der neue Operator in js? Feb 19, 2024 am 11:17 AM

Wie funktioniert der neue Operator in js? Es werden spezifische Codebeispiele benötigt. Der neue Operator in js ist ein Schlüsselwort, das zum Erstellen von Objekten verwendet wird. Seine Funktion besteht darin, ein neues Instanzobjekt basierend auf dem angegebenen Konstruktor zu erstellen und einen Verweis auf das Objekt zurückzugeben. Bei Verwendung des neuen Operators werden tatsächlich die folgenden Schritte ausgeführt: Erstellen eines neuen leeren Objekts; Verweisen des Prototyps des leeren Objekts auf das Prototypobjekt des Konstruktors; Zuweisen des Gültigkeitsbereichs des Konstruktors auf das neue Objekt Objekt); Führen Sie den Code im Konstruktor aus und geben Sie das neue Objekt an

Die neue GFX-Kamera mit festem Objektiv von Fujifilm stellt den neuen Mittelformatsensor vor und könnte den Auftakt einer völlig neuen Serie geben Die neue GFX-Kamera mit festem Objektiv von Fujifilm stellt den neuen Mittelformatsensor vor und könnte den Auftakt einer völlig neuen Serie geben Sep 27, 2024 am 06:03 AM

Fujifilm war in den letzten Jahren sehr erfolgreich, vor allem aufgrund seiner Filmsimulationen und der Beliebtheit seiner kompakten Kameras im Rangefinger-Stil in den sozialen Medien. Laut Fujirumors scheint sich das Unternehmen jedoch nicht auf seinen Lorbeeren auszuruhen. Die u

See all articles