Heim  >  Artikel  >  Backend-Entwicklung  >  So simulieren Sie die Mehrfachvererbung in PHP

So simulieren Sie die Mehrfachvererbung in PHP

不言
不言Original
2018-07-05 10:55:261832Durchsuche

In diesem Artikel wird hauptsächlich die Implementierung der simulierten Mehrfachvererbung in PHP vorgestellt, die einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.

Wie man die simulierte Mehrfachvererbung in PHP implementiert

1. Zusammenfassung

Zusammenfassung in einem Satz: Wenn Sie von anderen erben, möchten Sie tatsächlich auch die Methoden und Eigenschaften in den Klassen anderer Personen aufrufen, sodass Sie Folgendes tun können: Erstellen Sie eine Objekt der Zielklasse in dieser Klasse und dann übergeben Dieses Objekt wird zum Aufrufen von Methoden und Eigenschaften verwendet, was praktischer ist als die Vererbung.

2. Magic-Methode __call implementiert simulierte Mehrfachvererbung

1. Verwandtes Wissen

PHP verfügt nicht über die Funktion der Mehrfachvererbung. Selbst in einer Programmiersprache, die Mehrfachvererbung unterstützt, verwenden wir diese Funktion selten. Nach Meinung der meisten Menschen ist Mehrfachvererbung keine gute Entwurfsmethode. Wenn Sie einer Klasse zusätzliche Funktionen hinzufügen möchten, müssen Sie keine Vererbung verwenden. Hier stelle ich eine Methode zur Simulation der Mehrfachvererbung als Referenz zur Verfügung.

PHP hat eine magische Methode namens __call. Wenn Sie eine Methode aufrufen, die nicht existiert, wird diese Methode automatisch aufgerufen. An dieser Stelle haben wir die Möglichkeit, den Aufruf an eine vorhandene Methode umzuleiten. Für Unterklassen, die mehrere übergeordnete Klassen erben, ist der Prozess der Methodensuche im Allgemeinen wie folgt:

eigene Methode -> Methode der übergeordneten Klasse 2...

Der Simulationsprozess ist ungefähr wie folgt: Instanziieren Sie jede übergeordnete Klasse und verwenden Sie sie dann als Attribut der Unterklasse. Diese übergeordneten Klassen stellen einige öffentliche Methoden bereit. Wenn eine Unterklasse eine Methode hat, wird die Funktion __call() nicht aufgerufen. Dies entspricht dem „Überschreiben“ der Methode der übergeordneten Klasse. Wenn eine nicht vorhandene Methode aufgerufen wird, wird die Methode __call() verwendet, um Methoden zu finden, die wiederum von der übergeordneten Klasse aufgerufen werden können. Obwohl dies keine vollständige Mehrfachvererbung ist, kann es uns helfen, das Problem zu lösen.

 1 <?php 
 2 class Parent1 { 
 3     function method1() {} 
 4     function method2() {} 
 5 } 
 6 class Parent2 { 
 7     function method3() {} 
 8     function method4() {}
 9 }
 10 class Child {
 11     protected $_parents = array();
 12     public function Child(array $parents=array()) {
 13         $_parents = $parents;
 14     }
 15      
 16     public function __call($method, $args) {
 17         // 从“父类"中查找方法
 18         foreach ($this->_parents as $p) {
 19             if (is_callable(array($p, $method))) {
 20                 return call_user_func_array(array($p, $method), $args);
 21             }
 22         }
 23         // 恢复默认的行为,会引发一个方法不存在的致命错误
 24         return call_user_func_array(array($this, $method), $args);
 25     }
 26 }
 27 $obj = new Child(array(new Parent1(), new Parent2()));
 28 $obj->method1();
 29 $obj->method3();

Es gibt keine Vererbung von Eigenschaften, aber es ist nicht schwer umzusetzen. Die Eigenschaftsvererbung kann durch die magischen Methoden __set() und __get() simuliert werden. Bitte üben Sie es selbst.

Andere Methoden: Implementieren Sie mehrere Vererbungen über Schnittstellen

Klassen in PHP können nur eine übergeordnete Klasse erben. Wenn Sie mehrere Klassen erben möchten, sollten Sie Schnittstellen

Schnittstellen verwenden Simulieren Sie die Mehrfachvererbung

3. Detaillierte Erläuterung der Mehrfachvererbung in der PHP-Schnittstelle

In PHP-Schnittstellen können Schnittstellen Schnittstellen erben. Obwohl PHP-Klassen nur eine übergeordnete Klasse erben können (Einzelvererbung), unterscheiden sich Schnittstellen von Klassen Schnittstellen können Mehrfachvererbung implementieren und können eine oder mehrere Schnittstellen erben. Natürlich verwendet die -Schnittstellenvererbung auch das Extens-Schlüsselwort . Wenn Sie mehrere Vererbungen wünschen, verwenden Sie einfach Kommas, um die geerbten Schnittstellen zu trennen.

Es ist zu beachten, dass, wenn Ihre Schnittstelle andere Schnittstellen erbt, direkt die statischen Konstantenattribute und abstrakten Methoden der übergeordneten Schnittstelle erbt, sodass die Klasse alle relevanten Abstraktionen implementieren muss Implementierung der Schnittstellenmethode .

Jetzt haben Sie ein gewisses Verständnis für die Vererbung von PHP-Schnittstellen. Das folgende Beispiel dient als Referenz. Der Code lautet wie folgt:

<?php 
interface father{ 
function shuchu(); 
}  
interface fam extends father{ 
function cook($name); 
}  
class test implements fam{ 
function shuchu(){ 
echo "接口继承,要实现两个抽象方法"; 
echo "<br>"; 
}  
function cook($name){ 
echo "平时经常做饭的人是:".$name;  
}  
}  
$t=new test(); 
$t->shuchu(); 
$t->cook("妈妈");  
?>

Das Ergebnis der Ausführung des Codes ist wie folgt:

接口继承,要实现两个抽象方法
平时经常做饭的人是:妈妈
 

Das obige Beispiel zeigt, dass die Schnittstelle eine Schnittstelle erbt. Wenn die Testklasse also die Fam-Schnittstelle implementiert, muss sie zwei abstrakte Methoden instanziieren, dh sowohl die abstrakte Methode der Unterklasse der Schnittstelle als auch die übergeordnete Methode Klasse.

Sehen wir uns ein Beispiel für die Mehrfachvererbung von Schnittstellen an. Der Code lautet wie folgt:

<?php 
interface father{ 
function shuchu(); 
} 
interface mother{ 
function dayin($my); 
} 
interface fam extends father,mother{ 
function cook($name); 
} 
class test implements fam{ 
function dayin($my){ 
echo "我的名字是:".$my;  
echo "<br>"; 
} 
function shuchu(){ 
echo "接口继承,要实现两个抽象方法"; 
echo "<br>"; 
} 
function cook($name){ 
echo "平时经常做饭的人是:".$name;  
} 
} 
$t=new test(); 
$t->shuchu(); 
$t->dayin("小强");  
$t->cook("妈妈");  
?>

Beispiel für laufende Ergebnisse:

接口继承,要实现两个抽象方法
我的名字是:小强
平时经常做饭的人是:妈妈
 

Dieser Code erbt zwei Schnittstellen, weil die Schnittstelle erbt zwei Schnittstellen. Bei der Ausführung aller Instanzen müssen alle abstrakten Methoden dieser drei abstrakten Klassen instanziiert werden, insgesamt sind es drei. Nachdem Sie diese beiden Beispiele gelesen haben, sollten Sie mit der Schnittstellenvererbung vertraut sein. Tatsächlich gibt es Einzelvererbung und Mehrfachvererbung, sofern alle relevanten abstrakten Methoden implementiert sind.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Vorverarbeitung von MySQL in PHP vorbereiten

Erste Einführung in die PHP-Multiprozessprogrammierung

Verständnis des PHP-Polymorphismus

Das obige ist der detaillierte Inhalt vonSo simulieren Sie die Mehrfachvererbung 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