Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Formen verwendet PHP, um Polymorphismus zu implementieren?

Welche Formen verwendet PHP, um Polymorphismus zu implementieren?

王林
王林Original
2019-09-16 13:04:283127Durchsuche

Welche Formen verwendet PHP, um Polymorphismus zu implementieren?

In PHP5 ist der Typ der Variablen undefiniert. Eine Variable kann auf jede Art von Wert, Zeichenfolge, Objekt, Ressource usw. verweisen. 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 Schnittstellen.

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();
?>

Simulieren Sie Mehrfachvererbung mithilfe von Schnittstellen und Komposition

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.

Das ist Komposition. Legen Sie in einer Klasse eine andere Klasse als Eigenschaft 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;
?>

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Formen verwendet PHP, um Polymorphismus zu implementieren?. 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