简单谈谈php延迟静态绑定
使用场景
先来观察以下代码:
abstract class base { //do sth } class aClass extends base{ public static function create(){ return new aClass(); } } class bClass extends base{ public static function create(){ return new bClass(); } } var_dump(aClass::create()); var_dump(bClass::create());
输出:
object(aClass)#1 (0) { } object(bClass)#1 (0) { }
以上aClass和bClass继承于base这个抽象类,但是在两个子类中同时实现了create()这个静态方法。遵从oop思想,这种重复代码应该放在base这个父类中实现。
改进代码
abstract class base { public static function create(){ return new self(); } } class aClass extends base{ } class bClass extends base{ } var_dump(aClass::create()); var_dump(bClass::create());
现在的代码看起来好像已经符合我们之前的想法,将create()方法放在父类里共用了,那我们来运行下看会发生什么。
Cannot instantiate abstract class base in ...
很遗憾,代码好像并没有按照我们预想的那样去运行,父类中的self()被解析为base这个父类,并非继承与他的子类。于是为了解决这个问题,php5.3中引入了延迟静态绑定这个概念。
延迟静态绑定
abstract class base { public static function create(){ return new static(); } } class aClass extends base{ } class bClass extends base{ } var_dump(aClass::create()); var_dump(bClass::create());
这个代码与之前的几乎一致,不同点在于将self换成了static这个关键字,static会解析为子类,而非父类,这样就可以解决上面遇到的问题,这就是php的延迟静态绑定。
最后,运行一下代码,得到了最终想要的结果。
object(aClass)#1 (0) { } object(bClass)#1 (0) { }
以上就介绍了简单谈谈php延迟静态绑定,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Konzepte und Instanzen von Klassen und Methoden Klasse (Klasse): wird verwendet, um eine Sammlung von Objekten mit denselben Eigenschaften und Methoden zu beschreiben. Es definiert die Eigenschaften und Methoden, die jedem Objekt in der Sammlung gemeinsam sind. Objekte sind Instanzen von Klassen. Methode: In der Klasse definierte Funktion. Klassenkonstruktionsmethode __init__(): Die Klasse verfügt über eine spezielle Methode (Konstruktionsmethode) namens init(), die automatisch aufgerufen wird, wenn die Klasse instanziiert wird. Instanzvariablen: In der Deklaration einer Klasse werden Attribute durch Variablen dargestellt. Solche Variablen werden Instanzvariablen genannt. Instanziierung: Erstellen Sie eine Instanz einer Klasse, ein bestimmtes Objekt der Klasse. Vererbung: Das heißt, eine abgeleitete Klasse (derivedclass) erbt die Basisklasse (baseclass).

Das Velodrome-Modell ist von veCRV inspiriert und zielt darauf ab, eine überlegene Konsistenz zwischen den drei Hauptteilnehmern von DEX zu erreichen, darunter Liquiditätsanbieter (LPs), Token-Inhaber und Projekte, die Liquidität benötigen. Allerdings verstehen viele Teilnehmer im DeFi-Bereich die zugrunde liegenden Gründe immer noch nicht vollständig. Wenn Sie diesen Artikel ausführlich lesen, werden Sie in der Lage sein, aus diesem Dilemma herauszukommen und ihm auf den Grund zu gehen. Heute werden wir über Velodrome/Aerodrome sprechen, eine echte Erfolgsgeschichte im DeFi-Bereich. In diesem Artikel werden die beiden Modelle verglichen und erläutert, wie Velodrome das veCRV-Modell verbessert und welche erheblichen Auswirkungen diese kleinen Unterschiede haben. Lassen Sie mich zunächst Folgendes sagen

Bei der Golang-Programmierung ist es eine relativ häufige Anforderung, reguläre Ausdrücke zu verwenden, um zu überprüfen, ob die Eingabe eine zulässige Base64-Zeichenfolge ist. Für Entwickler können reguläre Ausdrücke verwendet werden, um schnell und genau zu überprüfen, ob Benutzereingaben korrekt sind. In diesem Artikel wird erläutert, wie Sie mithilfe regulärer Ausdrücke in Golang überprüfen, ob es sich bei der Eingabe um eine zulässige Base64-Zeichenfolge handelt. Beginnend mit der grundlegenden Syntax In Golang erfordert die Verwendung regulärer Ausdrücke die Verwendung der Bibliothek „regexp“. Diese Bibliothek bietet „Kompilieren“ und „

Bei der Java-Programmierung ist es häufig erforderlich, Binärdaten zur Übertragung in ein Textformat zu konvertieren, und die Base64-Codierung ist eine häufig verwendete Konvertierungsmethode. Base64 wandelt drei Byte Daten in vier Byte Textdaten um. Die Textdaten bestehen aus nur druckbaren Zeichen und können daher in Protokollen wie E-Mails und HTTP-Anfragenachrichten übertragen werden. Java bietet Base64-Codierungs- und Decodierungs-APIs, sodass wir Daten problemlos konvertieren können. In diesem Artikel wird die Verwendung in Java vorgestellt

Klasse ist ein Schlüsselwort in Python, das zum Definieren einer Klasse verwendet wird: Fügen Sie nach der Klasse ein Leerzeichen hinzu und fügen Sie dann den Klassennamen hinzu. Wenn es mehrere Wörter gibt, verwenden Sie die Groß-/Kleinschreibung Benennung, wie zum Beispiel [class Dog()].

jQuery ist eine klassische JavaScript-Bibliothek, die in der Webentwicklung weit verbreitet ist. Sie vereinfacht Vorgänge wie die Verarbeitung von Ereignissen, die Bearbeitung von DOM-Elementen und die Durchführung von Animationen auf Webseiten. Bei der Verwendung von jQuery kommt es häufig vor, dass Sie den Klassennamen eines Elements ersetzen müssen. In diesem Artikel werden einige praktische Methoden und spezifische Codebeispiele vorgestellt. 1. Verwenden Sie die Methoden „removeClass()“ und „addClass()“. jQuery stellt die Methode „removeClass()“ zum Löschen bereit

Beim Schreiben von PHP-Code ist die Verwendung von Klassen eine weit verbreitete Praxis. Durch die Verwendung von Klassen können wir verwandte Funktionen und Daten in einer einzigen Einheit kapseln, wodurch der Code klarer, leichter lesbar und einfacher zu warten ist. In diesem Artikel wird die Verwendung von PHPClass ausführlich vorgestellt und spezifische Codebeispiele bereitgestellt, um den Lesern zu helfen, besser zu verstehen, wie Klassen zur Optimierung von Code in tatsächlichen Projekten angewendet werden. 1. Klassen erstellen und verwenden In PHP können Sie das Schlüsselwort class verwenden, um eine Klasse zu definieren und Eigenschaften und Methoden in der Klasse zu definieren.

Vue-Fehler: V-bind kann nicht verwendet werden, um Klasse und Stil korrekt zu binden. Wie kann das Problem gelöst werden? In der Vue-Entwicklung verwenden wir häufig die V-Bind-Anweisung, um Klasse und Stil dynamisch zu binden. Manchmal können jedoch Probleme auftreten, z. B. dass wir V-Bind nicht korrekt zum Binden von Klasse und Stil verwenden können. In diesem Artikel werde ich die Ursache dieses Problems erläutern und Ihnen eine Lösung anbieten. Lassen Sie uns zunächst die v-bind-Direktive verstehen. v-bind wird zum Binden von V verwendet
