Abstrakte Klassen und Schnittstellendefinitionen in PHP
Ich werde zuerst Schnittstellen vorstellen, da abstrakte Klassen in mehreren PHP-Nachschlagewerken, die ich kürzlich gelesen habe, nicht erwähnt werden.
Ich habe auch das Gefühl, dass abstrakte Klassen nach dem Verständnis der Schnittstellen sehr leicht zu verstehen sind.
Der Beispielcode wurde beiläufig geschrieben. Der Beispielcode ist sehr gut und nach dem Testen werden keine Fehler gemeldet. Wer zu faul ist, den Code zu lesen, wird den Text trotzdem sehen. Kastanien werden nicht gut geerntet.
Code-Testumgebung: php5.3.29
Schnittstelle:
Die Schnittstelle wurde für die Abstraktion entwickelt, entspricht einer Konvention oder Spezifikation, um die Framework-Konstruktion zu erleichtern und Kodex der Arbeitsteilung.
Es gibt den Namen, die Parameter und die Mitgliedskonstanten abstrakter Methoden an, darf aber keine spezifischen Methoden oder Variablen enthalten.
Ich persönlich denke, dass PHP eine schwach typisierte Sprache ist und Wert auf Flexibilität legt. Im Vergleich zu Java weist die Schnittstelle in PHP zu lockere Typanforderungen auf. Nicht sehr einfach zu verwenden und nicht für den Einsatz in großen Mengen zu empfehlen.
1) Alle Schnittstellen sind abstrakte Methoden. (Da es zum Implementieren von Unterklassen verwendet wird, muss es öffentlich oder geschützt sein.)
2) Die Schnittstelle kann keine spezifischen Methoden und nur Mitgliedskonstanten enthalten.
3) Aufgrund des Unterschieds zwischen stark typisierten Sprachen wie PHP und Java C ist PHP schwach typisiert und der dynamische Typ selbst gibt den Rückgabetyp nicht an. Der Datentyp des Parameters kann geschrieben werden Mit Ausnahme der vier Grundtypen, die nicht angegeben werden können, gibt es keine Anforderungen an die Typen der Methodenrückgabewerte und -parameter.
4) Eine Klasse kann mehrere Schnittstellen implementieren. Verwendung: Implementieren Sie nach dem Schlüsselwort „implements“ mehrere durch Kommas getrennte Schnittstellen.
interface Car { const name = "车子"; public function run($speed=400,$time=300); } class Xiali implements Car { public function run($s=100,$t=200){//参数个数必须相同 echo '哈哈 我会跑'; return 'abc'; } public function fly() { echo '哈哈我会飞'; } }
Abstrakte Klasse: Die Funktion ist dieselbe wie die Schnittstelle, beide dienen zur Standardisierung der Funktionen der Unterklasse, enthalten jedoch spezifischere Inhalte als die Schnittstelle.
1) Eine Klasse, die mindestens eine abstrakte Methode enthält (mit anderen Worten, solange eine Klasse eine oder mehrere abstrakte Methoden hat, muss diese Klasse eine abstrakte Klasse sein.)
2 ) Abstrakte Klassen können wie Schnittstellen nicht instanziiert werden. Es heißt abstrakt, warum also instanziieren? Die Beispiele sind alle konkret. 2333.
3) Zusammenfassung: Der Unterschied zwischen abstrakten Klassen und gewöhnlichen Klassen: 1. Enthält mindestens eine abstrakte Methode 2. Kann nicht instanziiert werden. Alles andere ist gleich.
4) Verwendung:
abstract class Father{ abstract function func1();//至少一个抽象方法。 public function func2(){//具体方法随便写。 echo 'func2'; $this->func3(); } private function func3(){ echo '一个private方法'; } }
Bei der Implementierung der geerbten abstrakten Methode
/** * 继承抽象类 * 必须实现其所有抽象方法 * 和普通一样,一个类也只能继承一个抽象类 */ class Son extends Father { public function func1() { echo '实现(重写)抽象方法。参数名个数必须相同' } }