Objektorientiert Programme werden durch eine hierarchische Struktur von Klassen erstellt. In Sprachen mit einfacher Vererbung erfolgt die Klassenvererbung baumartig erbt dann eine oder mehrere Unterklassen. Natürlich können mehrere Stammklassen zur Implementierung unterschiedlicher Funktionen verwendet werden. In einer gut gestalteten Architektur sollte jede Stammklasse über eine nützliche Schnittstelle verfügen, die vom Anwendungscode verwendet werden kann. Wenn unser Anwendungscode für die Arbeit mit der Stammklasse konzipiert ist, kann er auch mit jeder Unterklasse funktionieren, die von der Stammklasse erbt.
Eine abstrakte Methode ist ein Platzhalter, genau wie eine normale Methode in einer Unterklasse (sie nimmt einen Platz ein, funktioniert aber nicht. Sie unterscheidet sich von einer normalen Methode – sie hat keinen Code). Wenn eine Klasse eine oder mehrere abstrakte Methoden enthält, wird die Klasse zu einer abstrakten Klasse. Sie können keine abstrakten Klassen instanziieren. Sie müssen von ihnen erben und dann Unterklassen instanziieren. Sie können sich abstrakte Klassen auch als Vorlage für Unterklassen vorstellen.
Wenn Sie alle abstrakten Methoden überschreiben, wird die Unterklasse zu einer normalen Klasse. Wenn nicht alle Methoden überschrieben werden, ist die Unterklasse immer noch abstrakt. Wenn eine Klasse eine abstrakte Methode enthält (auch wenn es nur eine gibt), müssen Sie die Klasse als abstrakt deklarieren, indem Sie vor dem Schlüsselwort class hinzufügen.
Die Syntax der Deklaration einer abstrakten Methode unterscheidet sich von der Syntax der Deklaration einer allgemeinen Methode. Die abstrakte Methode hat keinen in geschweiften Klammern {} enthaltenen Hauptkörper wie eine allgemeine Methode und endet mit einem Semikolon;.
In Beispiel 6.13 definieren wir eine Klasse Shape, die eine getArea-Methode enthält. Da es jedoch unmöglich ist, die Fläche der Figur zu bestimmen, ohne die Form zu kennen, haben wir die Methode getArea als abstrakte Methode deklariert. Sie können ein Shape-Objekt nicht instanziieren, aber Sie können von ihm erben oder es in einem Ausdruck verwenden, wie in Beispiel 6.13.
Wenn Sie eine Klasse nur mit abstrakten Methoden erstellen, definieren Sie eine Schnittstelle. Um diese Situation zu veranschaulichen, verfügt PHP über die Schnittstelle und implementiert Schlüsselwörter. Sie können eine Schnittstelle anstelle einer abstrakten Klasse und Implementierungen anstelle von extends verwenden, um Ihre Klassendefinition zu beschreiben, oder Sie können beispielsweise eine myClass-Implementierung von myIterface verwenden . wählen.
/*Hinweis:
Die beiden Methoden beziehen sich auf:
1. abstrakte Klasse aaa{} (beachten Sie, dass es in aaa nur abstrakte Methoden gibt, keine allgemeinen Methoden)
Klasse bbb erweitert aaa{} (Überschreiben Sie die abstrakte Methode in aaa in bbb)
2. Schnittstelle aaa{}
Klasse bbb implementiert aaa{} (Überschreiben Sie die abstrakte Methode in aaa in bbb)
*/
Listing 6.13 Abstrakte Klassen
//abstract root class 抽象根类 abstract class Shape { abstract function getArea(); //定义一个抽象方法 } //abstract child class 抽象子类 abstract class Polygon extends Shape //多边形 { abstract function getNumberOfSides(); } //concrete class 实体类 三角形类 class Triangle extends Polygon { public $base; public $height; public function getArea() //覆写计算面积方法 { return(($this->base * $this->height)/2); } public function getNumberOfSides() //覆写边数统计方法 { return(3); } } //concrete class 实体类四边形 class Rectangle extends Polygon { public $width; public $height; public function getArea() { return($this->width * $this->height); } public function getNumberOfSides() { return(4); } } //concrete class 实体类 圆形 class Circle extends Shape { public $radius; public function getArea() { return(pi() * $this->radius * $this->radius); } } //concrete root class 定义一个颜色类 class Color { public $name; } $myCollection = array(); //建立形状的集合,放入数组 //make a rectangle $r = new Rectangle; $r->width = 5; $r->height = 7; $myCollection[] = $r; unset($r); //make a triangle $t = new Triangle; $t->base = 4; $t->height = 5; $myCollection[] = $t; unset($t); //make a circle $c = new Circle; $c->radius = 3; $myCollection[] = $c; unset($c); //make a color $c = new Color; $c->name = "blue"; $myCollection[] = $c; unset($c); foreach($myCollection as $s) { if($s instanceof Shape) //如果$s是Shape类的实例 { print("Area: " . $s->getArea() . "n"); } if($s instanceof Polygon) { print("Sides: " .$s->getNumberOfSides()."n"); } if($s instanceof Color) { print("Color: $s->name n"); } print("n"); }
Das obige ist der detaillierte Inhalt vonGrundlegendes Tutorial zu abstrakten Methoden und abstrakten Klassen des PHP-Objektmodells. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!