Das Konzept des Polymorphismus in Java bezieht sich auf den Objekttyp, auf den eine Variable zeigen kann, bei dem es sich um eine Unterklasse des Variablendeklarationstyps handelt. Sobald ein Objekt erstellt wurde, bleibt sein Typ unverändert.
In PHP5 ist der Typ einer Variablen undefiniert >, Objekte, Ressourcen usw. Wir können nicht sagen, dass Polymorphismus in PHP5 eine Variable ist. Wir können nur sagen, dass in PHP5 Polymorphismus an der Typhinweisposition von Methodenparametern angewendet wird.
Jedes Unterklassenobjekt einer Klasse kann die Typanforderung mit dem aktuellen Typ als Typhinweis erfüllen.Alle Klassen, die diese Schnittstelle implementieren, können die Anforderungen an Methodenparameter erfüllen, indem sie den Schnittstellentyp als Typhinweis verwenden.
Einfach ausgedrückt hat eine Klasse die Identität ihrer übergeordneten Klasse und der implementierten Schnittstelle.
<?php interface User{ // User接口 public function getName(); public function setName($_name); } class NormalUser implements User { // 实现接口的类. private $name; public function getName(){ return $this->name; } public function setName($_name){ $this->name = $_name; } } class UserAdmin{ //操作. public static function ChangeUserName(User $_user,$_userName){ $_user->setName($_userName); } } $normalUser = new NormalUser(); UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例. echo $normalUser->getName(); ?>
Vererbungen zu simulieren Simulieren Sie Mehrfachvererbung durch Komposition.
Mehrfachvererbung wird in PHP nicht unterstützt. Wenn wir die Methoden mehrerer Klassen verwenden möchten, um die Wiederverwendung von Code zu erreichen, gibt es eine Möglichkeit?
Das ist eine Kombination. Legen Sie in einer Klasse eine andere Klasse auf das
-Attributfest. Das folgende Beispiel simuliert eine Mehrfachvererbung.
SchnittstellenbeispielSchreiben Sie ein konzeptionelles Beispiel. Wir entwerfen ein Online-Verkaufssystem und der Benutzerteil ist wie folgt gestaltet: Benutzer werden in drei Typen unterteilt: NormalUser, VipUser und InnerUser. Es ist erforderlich, den Preis des vom Benutzer gekauften Produkts auf der Grundlage der verschiedenen Rabatte des Benutzers zu berechnen. Und es muss Platz für zukünftige Erweiterungen und Wartungsarbeiten reserviert werden.
<?php interface User { public function getName(); public function setName($_name); public function getDiscount(); } abstract class AbstractUser implements User { private $name = ""; protected $discount = 0; protected $grade = ""; function construct($_name) { $this->setName($_name); } function getName() { return $this->name; } function setName($_name) { $this->name = $_name; } function getDiscount() { return $this->discount; } function getGrade() { return $this->grade; } } class NormalUser extends AbstractUser { protected $discount = 1.0; protected $grade = "Normal"; } class VipUser extends AbstractUser { protected $discount = 0.8; protected $grade = "VipUser"; } class InnerUser extends AbstractUser { protected $discount = 0.7; protected $grade = "InnerUser"; } interface Product { function getProductName(); function getProductPrice(); } interface Book extends Product { function getAuthor(); } class BookOnline implements Book { private $productName; protected $productPrice; protected $Author; function construct($_bookName) { $this->productName = $_bookName; } function getProductName() { return $this->productName; } function getProductPrice() { $this->productPrice = 100; return $this->productPrice; } public function getAuthor() { $this->Author = "chenfei"; return $this->Author; } } class Productsettle { public static function finalPrice(User $_user, Product $_product, $number) { $price = $_user->getDiscount() * $_product->getProductPrice() * $number; return $price; } } $number = 10; $book = new BookOnline(" 设计模式 "); $user = new NormalUser("tom"); $price = Productsettle::finalPrice($user, $book, $number); $str = "您好,尊敬的" . $user->getName() . "<br />"; $str .= "您的级别是" . $user->getGrade() . "<br />"; $str .= "您的折扣是" . $user->getDiscount() . "<br />"; $str .= "您的价格是" . $price; echo $str; ?>
Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele für zwei Methoden zur Implementierung des PHP-Polymorphismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!