Heim Backend-Entwicklung PHP-Tutorial Was ist der Unterschied zwischen new self() und new static()

Was ist der Unterschied zwischen new self() und new static()

Jan 27, 2018 am 10:50 AM
self static 区别

Es gibt viele Funktionen in PHP, die wir nicht unterscheiden können. Was ist zum Beispiel der Unterschied zwischen new self() und new static()? Der Schlag kann natürlich nicht vollständig erklärt werden, daher wird dieser Artikel Ihnen den Unterschied zwischen new self() und new static() in PHP zeigen.

1.new static() ist eine neue Funktion, die in der PHP5.3-Version eingeführt wurde.

2. Ob new static() oder new self(), ein neues Objekt ist neu.

3. Was ist der Unterschied zwischen den von new in diesen beiden Methoden erzeugten Objekten? Ist das von new erzeugte Objekt dieselbe Klasseninstanz oder eine andere Klasseninstanz?

Um das obige Problem zu untersuchen, beginnen wir mit einem einfachen Code:


class Father {

 public function getNewFather() {
  return new self();
 }

 public function getNewCaller() {
  return new static();
 }

}

$f = new Father();

print get_class($f->getNewFather());
print get_class($f->getNewCaller());
Nach dem Login kopieren

Beachten Sie, dass die get_class()-Methode von Der obige Code wird verwendet. Rufen Sie den Klassennamen ab, zu dem die Instanz gehört.

Das Ergebnis hier ist: Unabhängig vom Aufruf von getNewFather() oder getNewCaller() wird eine Instanz der Father-Klasse zurückgegeben.

Das gedruckte Ergebnis ist: FatherFather

Zu diesem Zeitpunkt scheint es keinen Unterschied zwischen new self() und new static() zu geben. Machen wir weiter:


class Sun1 extends Father {

}

class Sun2 extends Father {

}

$sun1 = new Sun1();
$sun2 = new Sun2();

print get_class($sun1->getNewFather());
print get_class($sun1->getNewCaller());
print get_class($sun2->getNewFather());
print get_class($sun2->getNewCaller());
Nach dem Login kopieren

Sehen Sie sich den Code oben an. Da es sich um getNewFather() und getNewCaller() der Father-Klasse handelt öffentlich, daher erben Unterklassen diese beiden Methoden.

Das gedruckte Ergebnis ist: FatherSun1FatherSun2

Wir haben festgestellt, dass das durch den Aufruf von getNewFather() zurückgegebene Objekt unabhängig davon, ob es Sun1 oder Sun2 ist, eine Instanz der Father-Klasse ist, während getNewCaller() das zurückgibt Anruf Beispiele für

Das heißt, $sun1 gibt eine Instanz der Sun1-Klasse zurück und $sun2 gibt eine Instanz der Sun2-Klasse zurück.

Jetzt scheine ich den Unterschied zwischen new self() und new static() zu verstehen.

Erstens kann sich ihr Unterschied nur in der Vererbung widerspiegeln. Wenn es keine Vererbung gibt, gibt es keinen Unterschied zwischen den beiden.

Dann bleibt die von new self() zurückgegebene Instanz über Tausende von Jahren unverändert. Unabhängig davon, wer sie aufruft, wird sie eine Instanz derselben Klasse zurückgeben, während new static() vom Aufrufer bestimmt wird.

Der Aufrufer von $sun1->getNewCaller() oben ist $sun1, richtig! $sun1 ist eine Instanz der Klasse Sun1, daher wird eine Instanz der Klasse Sun1 zurückgegeben. Der gleiche Grund für $sun2 wird nicht wiederholt.

Verwandte Empfehlungen:

Detaillierte Erklärung von new self() im php_PHP-Tutorial

new static() und new self Die Unterschiede und Gemeinsamkeiten zwischen (), staticself

Wofür wird new static() verwendet? Wie man damit umgeht

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen new self() und new static(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Was sind die grundlegenden Anforderungen für C -Sprachfunktionen? Apr 03, 2025 pm 10:06 PM

C -Sprachfunktionen sind die Grundlage für die Code -Modularisierung und das Programmaufbau. Sie bestehen aus Deklarationen (Funktionsüberschriften) und Definitionen (Funktionskörper). C Sprache verwendet standardmäßig Werte, um Parameter zu übergeben, aber externe Variablen können auch mit dem Adresspass geändert werden. Funktionen können oder haben keinen Rückgabewert, und der Rückgabewerttyp muss mit der Deklaration übereinstimmen. Die Benennung von Funktionen sollte klar und leicht zu verstehen sein und mit Kamel oder Unterstrich die Nomenklatur. Befolgen Sie das Prinzip der einzelnen Verantwortung und behalten Sie die Funktion ein, um die Wartbarkeit und die Lesbarkeit zu verbessern.

Der Unterschied zwischen H5- und Miniprogramm und Apps Der Unterschied zwischen H5- und Miniprogramm und Apps Apr 06, 2025 am 10:42 AM

H5. Der Hauptunterschied zwischen Mini -Programmen und App ist: Technische Architektur: H5 basiert auf Web -Technologie, und Mini -Programme und Apps sind unabhängige Anwendungen. Erfahrung und Funktionen: H5 ist leicht und einfach zu bedienen, mit begrenzten Funktionen; Mini -Programme sind leicht und haben eine gute Interaktivität. Apps sind leistungsstark und haben reibungslose Erfahrung. Kompatibilität: H5 ist plattformübergreifend, Applets und Apps werden von der Plattform eingeschränkt. Entwicklungskosten: H5 verfügt über niedrige Entwicklungskosten, mittlere Mini -Programme und die höchste App. Anwendbare Szenarien: H5 eignet sich für Informationsanzeigen, Applets eignen sich für leichte Anwendungen und Apps eignen sich für komplexe Funktionen.

Konzept der C -Sprachfunktion Konzept der C -Sprachfunktion Apr 03, 2025 pm 10:09 PM

C -Sprachfunktionen sind wiederverwendbare Codeblöcke. Sie erhalten Input, führen Vorgänge und Rückgabergebnisse aus, die modular die Wiederverwendbarkeit verbessert und die Komplexität verringert. Der interne Mechanismus der Funktion umfasst Parameterübergabe-, Funktionsausführung und Rückgabeteile. Der gesamte Prozess beinhaltet eine Optimierung wie die Funktion inline. Eine gute Funktion wird nach dem Prinzip der einzigen Verantwortung, der geringen Anzahl von Parametern, den Benennungsspezifikationen und der Fehlerbehandlung geschrieben. Zeiger in Kombination mit Funktionen können leistungsstärkere Funktionen erzielen, z. B. die Änderung der externen Variablenwerte. Funktionszeiger übergeben Funktionen als Parameter oder speichern Adressen und werden verwendet, um dynamische Aufrufe zu Funktionen zu implementieren. Das Verständnis von Funktionsmerkmalen und Techniken ist der Schlüssel zum Schreiben effizienter, wartbarer und leicht verständlicher C -Programme.

So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS So setzen Sie den Kennwortschutz für Exportieren von PDF auf PS Apr 06, 2025 pm 04:45 PM

PDF mit Passwort geschützt in Photoshop exportieren: Öffnen Sie die Bilddatei. Klicken Sie auf "Datei" & gt; "Export" & gt; "Exportieren Sie als PDF". Stellen Sie die Option "Sicherheit" fest und geben Sie dasselbe Passwort zweimal ein. Klicken Sie auf "Exportieren", um eine PDF -Datei zu generieren.

Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Warum müssen Sie Vue.use (Vuerouter) in der Datei idex.js unter dem Router -Ordner anrufen? Apr 05, 2025 pm 01:03 PM

Die Notwendigkeit der Registrierung von Vuerouter in der Datei index.js -Datei im Ordner Router Bei der Entwicklung von VUE -Anwendungen stoßen Sie häufig Probleme mit der Routing -Konfiguration. Besonders...

Was sind die Unterschiede und Verbindungen zwischen C und C#? Was sind die Unterschiede und Verbindungen zwischen C und C#? Apr 03, 2025 pm 10:36 PM

Obwohl C und C# Ähnlichkeiten haben, sind sie völlig unterschiedlich: C ist eine prozessorientierte, manuelle Speicherverwaltung und plattformabhängige Sprache, die für die Systemprogrammierung verwendet wird. C# ist eine objektorientierte, Müllsammlung und plattformunabhängige Sprache, die für Desktop-, Webanwendungs- und Spielentwicklung verwendet wird.

Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Wie benutze ich XPath, um von einem bestimmten DOM -Knoten in JavaScript aus zu suchen? Apr 04, 2025 pm 11:15 PM

Detaillierte Erläuterung der XPath -Suchmethode unter DOM -Knoten in JavaScript, wir müssen häufig bestimmte Knoten aus dem DOM -Baum basierend auf XPath -Ausdrücken finden. Wenn Sie ...

Der Unterschied in den Ausgangsergebnissen der Konsole.log: Warum haben dieselben Variablen unterschiedliche Druckmethoden, aber unterschiedliche Ergebnisse? Der Unterschied in den Ausgangsergebnissen der Konsole.log: Warum haben dieselben Variablen unterschiedliche Druckmethoden, aber unterschiedliche Ergebnisse? Apr 04, 2025 am 11:48 AM

Eingehende Diskussion der Unterschiede in der Konsole.log-Ausgabe in diesem Artikel wird die Gründe analysieren, warum die Ausgabeergebnisse der Konsolenfunktion in einem Code-Stück unterschiedlich sind. Code -Snippets beinhalten URL -Parameterauflösung ...

See all articles