Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in Polymorphismus und dynamische Bindung in PHP

Detaillierte Einführung in Polymorphismus und dynamische Bindung in PHP

怪我咯
怪我咯Original
2017-07-16 09:58:351474Durchsuche

Was ist Polymorphismus?

Polymorphismus ist nach der 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 in Form von Überladung Methoden und geerbten Klassen. 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 Polymorphismus von PHP nicht wie folgt interpretieren können:

Der Code lautet wie folgt:

Shape s = new Triangle();
s.draw();

Allerdings wurde Type Hinting in PHP5.1 eingeführt. Die Parametertypen von Funktionen (oder Methoden) können eingeschränkt werden. Wir verwenden diese Funktion, um den Polymorphismus von PHP5 zu demonstrieren.

Beziehen Sie sich auf den folgenden Code:

class TestPolymorphism {
    public function drawNow(Shape $shape) {
        $shape->draw();
    }
}

Die Funktion drawNow() begrenzt den Parametertyp, der an ein von der Shape-Schnittstelle abgeleitetes Objekt übergeben wird. Hier sind die Parameter, die wir an drawNow() übergeben. Möglicherweise handelt es sich um ein Dreieck- oder Rechteckobjekt oder um ein anderes abgeleitetes Klassenobjekt der Shape-Schnittstelle, z. B. Circle usw. Einfach ausgedrückt ist der Parametertyp von drawNow() unvorhersehbar und das Verhalten von $shape-> draw() wird letztendlich durch den spezifischen Typ der übergebenen Parameter bestimmt. Wenn beispielsweise ein Triangle-Objekt übergeben wird, wird die draw()-Methode von Triangle aufgerufen. Die Methode draw() von Rechteck wird aufgerufen. 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?

HaoHappy übersetzte PHP5 Objekt Muster wird in Abschnitt 9 eingeführt:

Zusätzlich zur Zugriffsbeschränkung bestimmt die Zugriffsmethode auch, welche Methode von aufgerufen wird Unterklasse oder auf welche Attribute Unterklassen zugreifen. 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.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Polymorphismus und dynamische Bindung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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