Heim  >  Artikel  >  Backend-Entwicklung  >  Eine detaillierte Einführung in Schnittstellen und Implementierungen in PHP

Eine detaillierte Einführung in Schnittstellen und Implementierungen in PHP

零下一度
零下一度Original
2017-06-17 10:50:001407Durchsuche

PHP-Klassen sind Einzelvererbungen, das heißt, sie unterstützen keine Mehrfachvererbung. Wenn eine Klasse die Funktionen mehrerer Klassen benötigt, ist die Vererbung machtlos. Aus diesem Grund führt PHP die Klassenschnittstellentechnologie ein. Der folgende Artikel stellt Ihnen hauptsächlich die relevanten Informationen zur Schlüsselwortschnittstelle und zur Implementierung in PHP vor. Freunde, die sie benötigen, können einen Blick darauf werfen.

PHP-Schnittstelle

Die PHP-Klasse ist eine Einzelvererbung, das heißt, sie unterstützt keine Mehrfachvererbung, wenn eine Klasse mehrere Vererbungen erfordert Klassen Wenn es um Funktionen geht, ist die Vererbung machtlos, daher führt PHP die Klassenschnittstellentechnologie ein.

Wenn alle Methoden in einer abstrakten Klasse abstrakte Methoden sind und keine Variablen deklariert sind und alle Mitglieder in der Schnittstelle öffentliche Berechtigungen haben, dann werden diese speziellen abstrakten Klassen als Schnittstellen bezeichnet .

Die Schnittstelle wird mit dem Schlüsselwort „interface“ definiert, und das Schlüsselwort „implements“ dient zur Implementierung der Methoden in der Schnittstelle, die vollständig implementiert sein müssen.

Anwendung der Schnittstelle im Unterricht

1. Stichwort: Schnittstelle

2. Stichwort: implementiert

1. Einführung und Erstellung von Schnittstellen

Schnittstelle: eine spezielle abstrakte Klasse, deren Mitglieder und Attribute alle abstrakt oder konstant sind.

Regeln:

1. Alle Methoden in der Klasse sind abstrakt.

2. Für abstrakte Methoden muss kein Abstract hinzugefügt werden.

3. Das abstrakte Methodenattribut der Schnittstelle ist öffentlich.

4. Mitgliedsattribute müssen Konstanten sein.

Der Formatcode lautet wie folgt:


interface demo { 
const NAME = "常量对象属性"; 
function fun1(); 
function fun2(); //抽象方法。 
}

2. Anwendung und Spezifikation von Schnittstellen

Unterschiede in den Schnittstellenreferenzen Für das Klassenvererbungsschlüsselwort extends kann die Vererbung nur einzeln erfolgen, während die Schnittstelle das Schlüsselwort „implements“ verwenden kann, um mehrere durch Kommas getrennte Referenzen zu haben

1. Format: gewöhnliche Klasse Referenzschnittstelle


class MyPc implements demo , demo2 , demo3 { 
... 
}
2. Format: Beispiel für eine abstrakte Klassenanwendung


abstract class MyPc implements demo , demo2 , demo3 { 
... 
}
3 : Referenzschnittstellen der übergeordneten Klasse erben koexistieren


class MyPc extends Root implements demo , demo2 , demo3 { 
... 
}
Zuerst erben und dann die Schnittstelle, einzelne Vererbung mehrerer Schnittstellen.

4. Format: Schnittstelle und Schnittstellenvererbung


interface demo3 extends demo { 
... 
}
Der Beispielcode lautet wie folgt:



<?php 
interface demo { 
 const NAME = "名称"; 
 function fun1(); 
 function fun2(); 
} 
interface demo2 { 
 function fun3(); 
 function fun4(); 
} 
interface demo3 { 
 const TEST = "Test"; 
 function fun5(); 
} 
class MyPc implements demo, demo2 { 
 function fun1() { 
 echo "++++++++++<br />"; 
 } 
 function fun2() { 
 echo "----------<br />"; 
 } 
 function fun3() { 
 echo "1111111111<br />"; 
 } 
 function fun4() { 
 echo "2222222222<br />"; 
 } 
} 
class MyPs extends MyPc implements demo3 { 
 function fun5() { 
 echo "继承类后引用接口"; 
 } 
} 
$p = new MyPs; 
$p->fun1(); 
$p->fun2(); 
$p->fun3(); 
$p->fun4(); 
$p->fun5(); 
?>
Zum Beispiel wird die Schnittstelle mit dem Schlüsselwort „interface“ definiert, und das Schlüsselwort „implements“ wird zum Implementieren der Methoden in der Schnittstelle verwendet und muss vollständig implementiert werden.

Der Beispielcode lautet wie folgt:


<?php 
//定义接口 
interface User{ 
 function getDiscount(); 
 function getUserType(); 
} 
//VIP用户 接口实现 
class VipUser implements User{ 
 // VIP 用户折扣系数 
 private $discount = 0.8; 
 function getDiscount() { 
  return $this->discount; 
 } 
 function getUserType() { 
  return "VIP用户"; 
 } 
} 
class Goods{ 
 var $price = 100; 
 var $vc; 
 //定义 User 接口类型参数,这时并不知道是什么用户 
 function run(User $vc){ 
  $this->vc = $vc; 
  $discount = $this->vc->getDiscount(); 
 $usertype = $this->vc->getUserType(); 
  echo $usertype."商品价格:".$this->price*$discount; 
 } 
} 
$display = new Goods(); 
$display ->run(new VipUser); //可以是更多其他用户类型 
?>
Führen Sie das Beispiel aus, die Ausgabe lautet:

VIP-Benutzerproduktpreis: 80 Yuan

Dieses Beispiel zeigt eine einfache Anwendung einer PHP-Schnittstelle. In diesem Beispiel implementiert die Benutzeroberfläche den Rabatt des Benutzers und die VipUser-Klasse implementiert den spezifischen Rabattkoeffizienten. Schließlich implementiert die Produktkategorie Waren unterschiedliche Benutzerangebote basierend auf der Benutzeroberfläche.

Dieses Beispiel beschränkt sich auf die Demonstration der Verwendung der PHP-Schnittstelle und geht nicht auf deren wissenschaftlichen Charakter ein.

Mehrere Schnittstellen implementieren

PHP kann beim Erben einer Klasse auch mehrere Schnittstellen gleichzeitig implementieren:


class 子类 extends 父类 implemtns 接口1, 接口2, ... 
{ 
 ...... 
}

Der Unterschied zwischen abstrakten Klassen und Schnittstellen

Schnittstellen sind spezielle abstrakte Klassen und können auch als Spezifikation eines Modells angesehen werden. Der allgemeine Unterschied zwischen Schnittstellen und abstrakten Klassen ist wie folgt:

1. Wenn eine Unterklasse eine Schnittstelle implementiert, muss sie alle Methoden in der Schnittstelle implementieren (ob erforderlich oder nicht); wenn sie eine abstrakte Klasse erbt, muss sie alle Methoden in der Schnittstelle implementieren Es muss nur die erforderliche Methode implementiert werden. Verwenden Sie einfach die Methode.

2. Wenn sich der in einer Schnittstelle definierte Methodenname ändert, müssen alle Unterklassen, die diese Schnittstelle implementieren, den Methodennamen synchron aktualisieren, und wenn sich der Methodenname in einer abstrakten Klasse ändert, muss der entsprechende Methodenname aktualisiert werden Die Unterklasse wird davon nicht betroffen sein, sie wird lediglich zu einer neuen Methode (relativ zur alten Methodenimplementierung).

3. Abstrakte Klassen können nur einzeln geerbt werden. Wenn eine Unterklasse Funktionen implementieren muss, die von mehreren übergeordneten Klassen geerbt werden müssen, müssen Schnittstellen verwendet werden.



Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in Schnittstellen und Implementierungen 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