Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Beispiele für zwei Methoden zur Implementierung des PHP-Polymorphismus

Detaillierte Beispiele für zwei Methoden zur Implementierung des PHP-Polymorphismus

伊谢尔伦
伊谢尔伦Original
2017-06-29 10:09:142014Durchsuche

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.

Erzielen Sie Polymorphismus durch die Implementierung von Schnittstellen

<?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();
?>
Verwenden Sie Schnittstellen und Komposition, um mehrere

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

-Attribut

fest. Das folgende Beispiel simuliert eine Mehrfachvererbung.

Schnittstellenbeispiel

Schreiben 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!

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