Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Polymorphismus verstehen

PHP-Polymorphismus verstehen

不言
不言Original
2018-07-05 10:18:481876Durchsuche

Dieser Artikel stellt hauptsächlich das Verständnis des PHP-Polymorphismus vor, der einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.

PHP-Polymorphismus

Mehr Morphismus bedeutet dass derselbe Vorgang, die gleiche Funktion oder derselbe Prozess auf mehrere Arten von Objekten einwirken und unterschiedliche Ergebnisse erzielen kann. Verschiedene Objekte können beim Empfang derselben Nachricht unterschiedliche Ergebnisse liefern. Dieses Phänomen wird als Polymorphismus bezeichnet.

Polymorphismus ermöglicht es jedem Objekt, auf seine eigene Weise auf eine gemeinsame Nachricht zu reagieren. Polymorphismus erhöht die Flexibilität und Wiederverwendbarkeit der Software.

In der objektorientierten Softwareentwicklung ist Polymorphismus einer der wichtigsten Teile. Bei der objektorientierten Programmierung geht es nicht nur darum, verwandte Methoden und Daten einfach zu kombinieren, sondern verschiedene Elemente der objektorientierten Programmierung zu verwenden, um verschiedene Situationen im wirklichen Leben klar zu beschreiben. In diesem Abschnitt wird der Polymorphismus in der objektorientierten Programmierung ausführlich erläutert.

1. Was ist Polymorphismus?

Polymorphismus bedeutet wörtlich „mehrere Formen“. Es kann als mehrere Ausdrucksformen verstanden werden, nämlich „eine externe Schnittstelle und mehrere interne Implementierungsmethoden“. In der objektorientierten Theorie lautet die allgemeine Definition von Polymorphismus: Dieselbe Operation führt zu unterschiedlichen Ausführungsergebnissen, wenn sie auf Instanzen verschiedener Klassen angewendet wird. Das heißt, wenn Objekte unterschiedlichen Typs dieselbe Nachricht erhalten, erhalten sie unterschiedliche Ergebnisse.

In der tatsächlichen Anwendungsentwicklung besteht der Hauptgrund für die Verwendung von objektorientiertem Polymorphismus darin, dass verschiedene Unterklassenobjekte als eine übergeordnete Klasse behandelt werden können und die Unterschiede, die zwischen verschiedenen Unterklassenobjekten bestehen, abgeschirmt werden können Code erstellen und gemeinsame Programmierungen erstellen, um sie an sich ändernde Anforderungen anzupassen.

2. Polymorphes Anwendungsdesign

Um das Projekt in Zukunft problemlos erweitern und aktualisieren zu können, ist es normalerweise erforderlich, wiederverwendbare Anwendungen zu implementieren Module durch Vererbung für einfache Upgrades. Beim Entwerfen wiederverwendbarer Module ist es notwendig, die Verwendung von Flusskontrollanweisungen so weit wie möglich zu reduzieren. An diesem Punkt können Sie Polymorphismus verwenden, um diese Art von Design zu implementieren.
[Beispiel]veranschaulicht verschiedene Arten der Verarbeitung, die normalerweise mithilfe von Flusskontrollanweisungen implementiert werden. Der Code wird unten angezeigt.

class painter{ //定义油漆工类
       public function paintbrush(){                 //定义油漆工动作
           echo "油漆工正在刷漆!\n";
       }
   }
class typist{                                    //定义打字员类
       public function typed(){                     //定义打字员工作
           echo "打字员正在打字!\n";
       }
   }
function printworking($obj){                    //定义处理类
       if($obj instanceof painter){                //若对象是油漆工类,则显示油漆工动作
           $obj->paintbrush();
       }elseif($obj instanceof typist){            //若对象是打字员类,则显示打字员动作
           $obj->typed();
       }else{                                    //若非以上类,则显示出错信息
           echo "Error: 对象错误!";
       }
   }
printworking(new painter());                    //显示员工工作
   printworking(new typist());                     //显示员工工作

Analyse: Im obigen Programm werden zunächst zwei Mitarbeiterklassen definiert: Malerklasse und Schreibkraftklasse. Definieren Sie dann eine Verarbeitungsfunktion. In dieser Funktion wird beurteilt, ob es sich bei dem Mitarbeiter um einen definierten Mitarbeiter handelt, und der Arbeitsstatus des Mitarbeiters wird ausgedruckt. Die Ergebnisse sind unten aufgeführt.

Der Maler malt
Die Schreibkraft tippt

Aus dem obigen Programm ist leicht ersichtlich, dass Sie zunächst definieren müssen, wenn Sie den Arbeitsstatus mehrerer Mitarbeiter anzeigen möchten Definieren Sie die Arbeit des Mitarbeiters in der Mitarbeiterklasse und fügen Sie dann eine elseif-Anweisung in die printworking()-Funktion ein, um zu überprüfen, von welcher Mitarbeiterklasse das Objekt eine Instanz ist. Dies ist in der Praxis höchst unerwünscht. Wenn zu diesem Zeitpunkt Polymorphismus verwendet wird, kann dieses Problem leicht gelöst werden.

Sie können zunächst eine übergeordnete Mitarbeiterklasse erstellen. Alle Mitarbeiterklassen erben von der übergeordneten Mitarbeiterklasse und erben alle Methoden und Attribute der übergeordneten Klasse. Erstellen Sie dann eine „ist ein“-Beziehung in der Mitarbeiterklasse, um festzustellen, ob es sich um einen legalen Mitarbeiter handelt.

[Beispiel] veranschaulicht die Verwendung von Polymorphismus zum Umschreiben des obigen Beispiels. Der Code wird unten angezeigt.

class employee{//定义员工父类
   protected function working(){//定义员工工作,需要在子类的实现
       echo "本方法需要在子类中重载!";
   }
}
class painter extends employee{//定义油漆工类
   public function working(){//实现继承的工作方法
       echo "油漆工正在刷漆!\n";
   }
}
class typist extends employee{//定义打字员类
   public function working(){
       echo "打字员正在打字!\n";
   }
}
class manager extends employee{//定义经理类
   public function working(){
       echo "经理正在开会!";
   }
}
function printworking($obj){//定义处理方法
   if($obj instanceof employee){//若是员工对象,则显示其工作状态
       $obj->working();
   }else{//否则显示错误信息
       echo "Error: 对象错误!";
   }
}
printworking(new painter());//显示油漆工的工作
printworking(new typist());//显示打字员的工作
printworking(new manager());//显示经理的工作

Analyse: Definieren Sie im obigen Programm zunächst eine Mitarbeiter-Basisklasse und eine Methode für den Arbeitsstatus des Mitarbeiters. Definieren Sie dann drei Mitarbeiterklassen, die von der Mitarbeiterbasisklasse erben: Maler, Typist und Manager. Definieren Sie dann eine Methode zur Anzeige des Arbeitsstatus des Mitarbeiters. Und erstellen Sie bei dieser Methode eine „Ist-Eins“-Beziehung, um festzustellen, ob es sich um einen legalen Mitarbeiter handelt. Die Ergebnisse sind unten aufgeführt.

Der Maler malt!
Die Schreibkraft tippt!
Der Manager hat eine Besprechung!

Aus dem obigen Beispiel geht hervor, dass es egal ist, wie viele Mitarbeiter es gibt Wenn Klassen hinzugefügt werden, müssen Sie nur die automatische Mitarbeiterklasse und die von der übergeordneten Mitarbeiterklasse geerbten Methoden implementieren. Es besteht keine Notwendigkeit, die Methode „printing()“ zu ändern, die den Arbeitsstatus des Mitarbeiters anzeigt.

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

Verwandte Empfehlungen:

Einführung in die PHP-Dateiprogrammierung

Einführung in die grundlegende PHP-Syntax

Das obige ist der detaillierte Inhalt vonPHP-Polymorphismus verstehen. 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