Dieser Artikel stellt hauptsächlich den PHP-Polymorphismus und die dynamische Bindung vor, erklärt, was Polymorphismus und dynamische Bindung sind, und gibt Beispiele für Polymorphismus und dynamische Bindung. Ich hoffe, es hilft allen.
Was ist Polymorphismus?
Polymorphismus ist nach Datenabstraktion und -vererbung das dritte Merkmal objektorientierter Sprachen. Im wörtlichen Sinne bedeutet Polymorphismus „mehrere Formen“. Einfach ausgedrückt bedeutet Polymorphismus die Fähigkeit, mehrere Formen auszudrücken. insbesondere die Fähigkeit, Methoden zu überladen und Klassen zu erben. Polymorphismus gilt als wesentliches Merkmal objektorientierter Sprachen.
Zum Beispiel:
Wir erstellen eine Schnittstelle Shape und definieren eine leere Methode draw(), dann müssen alle Implementierungsklassen diese Methode implementieren. Angenommen, Shape hat zwei Implementierungsklassen: Dreieck und Rechteck. Obwohl wir den PHP-Polymorphismus nicht durch Java-Code wie folgt interpretieren können:
Shape s = new Triangle(); s.draw();
In PHP5.1 wurde jedoch Type Hinting eingeführt, das die Parameter der von uns verwendeten Funktions- (oder Methoden-) Typen einschränken kann Diese Funktion dient zur Demonstration des Polymorphismus in PHP5.
Beziehen Sie sich auf den folgenden Code:
class TestPolymorphism { public function drawNow(Shape $shape) { $shape->draw(); } }
Die Funktion drawNow() beschränkt den Parametertyp, der an ein von der Shape-Schnittstelle abgeleitetes Objekt übergeben wird. Hier übergeben wir ihn an drawNow () Die Parameter können Dreieck- oder Rechteckobjekte oder andere abgeleitete Klassenobjekte der Shape-Schnittstelle sein, wie z. B. Circle usw. Einfach ausgedrückt sind die Parametertypen von drawNow() unvorhersehbar, $shape->draw( ) Das Verhalten wird letztendlich durch den spezifischen Typ der übergebenen Parameter bestimmt. Wenn beispielsweise ein Triangle-Objekt übergeben wird, wird die Methode draw() von Triangle aufgerufen. Wenn ein Rechteck-Objekt übergeben wird, wird draw() aufgerufen. Methode von Rechteck aufgerufen wird. Dieses Verhalten bei der Entscheidung, welche Objektmethode aufgerufen werden soll, basierend auf der Art der zur Laufzeit übergebenen Objektparameter, kann als Polymorphismus bezeichnet werden.
Shape kann auch eine abstrakte Basisklasse oder eine nicht abstrakte Basisklasse sein. Die obige Diskussion ist wahr. Der Unterschied besteht darin, dass die Schnittstelle nur eine Reihe von Regeln definiert, denen die Implementierungsklasse entsprechen muss, während die Verwendung einer Basisklasse einige Standardverhaltensweisen für abgeleitete Klassen bereitstellen kann.
Der Referenzcode lautet wie folgt:
/** * Shape Interface * * @version 1.0 * @copyright */ interface Shape { public function draw(); } /** * Triangle * * @uses Shape * @version 1.0 * @copyright */ class Triangle implements Shape { public function draw() { print "Triangle::draw()\n"; } } /** * Rectangle * * @uses Shape * @version 1.0 * @copyright */ class Rectangle implements Shape { public function draw() { print "Rectangle::draw()\n"; } } /** * Test Polymorphism * * @version 1.0 * @copyright */ class TestPoly { public function drawNow(Shape $shape) { $shape->draw(); } } $test = new TestPoly(); $test->drawNow(new Triangle()); $test->drawNow(new Rectangle()); /* vim: set expandtab tabstop=4 shiftwidth=4: */
Was ist dynamische Bindung?
Das von HaoHappy übersetzte PHP5-Objektmuster wird in Abschnitt 9 vorgestellt:
Zusätzlich zur Zugriffsbeschränkung bestimmt die Zugriffsmethode auch, welche Methode von der Unterklasse oder welchem Attribut aufgerufen wird Auf die Unterklasse wird zugegriffen. Die Beziehung zwischen Funktionsaufrufen und der Funktion selbst sowie die Beziehung zwischen Mitgliedszugriff und variablen Speicheradressen wird als Bindung bezeichnet.
Andere Erklärung:
Bindung: Das Verbinden des Methodenaufrufs mit der Methode selbst wird als Bindung bezeichnet. Wenn die Bindung zur Kompilierungszeit erfolgt, wird sie als statische Bindung bezeichnet Die Methode wird basierend auf dem Typ des Objekts bestimmt und wird zur dynamischen Bindung.
PHP ist eine dynamische Sprache und verwendet dynamische Bindung. Es muss nicht darüber nachgedacht werden, welche verbindliche Strategie gewählt werden soll, da alles automatisch abläuft.
Verwandte Empfehlungen:
PHP objektorientierte Abschlussklasse und Abschlussmethode
PHP-Singleton-Modus-Implementierung
So verwenden Sie den PHP-Factory-Modus_PHP-Tutorial
Das obige ist der detaillierte Inhalt vonPHP-Polymorphismus und dynamische Bindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!