Heim  >  Artikel  >  Backend-Entwicklung  >  Ist PHP eine Einzelvererbung?

Ist PHP eine Einzelvererbung?

(*-*)浩
(*-*)浩Original
2019-09-29 10:45:532588Durchsuche

PHP verfügt nicht über Mehrfachvererbungsfunktionen. 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.

Ist PHP eine Einzelvererbung?

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 auf eine vorhandene Methode umzuleiten. Für Unterklassen, die mehrere übergeordnete Klassen erben, ist der Prozess zum Finden von Methoden im Allgemeinen wie folgt: (Empfohlenes Lernen: PHP-Video-Tutorial)

本身的方法 -> 父类1的方法 -> 父类2的方法...

Der Simulationsprozess ist ungefähr wie folgt: Fügen Sie jedes übergeordnete Element hinzu Klasseninstanzisierung und dann als Attribut der Unterklasse. Diese übergeordneten Klassen stellen einige öffentliche Methoden bereit. Wenn eine Unterklasse eine Methode besitzt, wird die Funktion __call() nicht aufgerufen. Dies entspricht dem „Überschreiben“ der Methode der übergeordneten Klasse.

Wenn eine nicht vorhandene Methode aufgerufen wird, sucht nach Methoden, die wiederum von der übergeordneten Klasse über die Methode __call() aufgerufen werden können. Obwohl dies keine vollständige Mehrfachvererbung ist, kann es uns helfen, das Problem zu lösen.

<?php
class Parent1 {
    function method1() {}
    function method2() {}
}
class Parent2 {
    function method3() {}
    function method4() {}
}
class Child {
    protected $_parents = array();
    public function Child(array $parents=array()) {
        $_parents = $parents;
    }
     
    public function __call($method, $args) {
        // 从“父类"中查找方法
        foreach ($this->_parents as $p) {
            if (is_callable(array($p, $method))) {
                return call_user_func_array(array($p, $method), $args);
            }
        }
        // 恢复默认的行为,会引发一个方法不存在的致命错误
        return call_user_func_array(array($this, $method), $args);
    }
}
$obj = new Child(array(new Parent1(), new Parent2()));
$obj->method1();
$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.

Das obige ist der detaillierte Inhalt vonIst PHP eine Einzelvererbung?. 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