Maison > développement back-end > Problème PHP > Quelles formes PHP utilise-t-il pour implémenter le polymorphisme ?

Quelles formes PHP utilise-t-il pour implémenter le polymorphisme ?

王林
Libérer: 2023-02-24 07:22:01
original
3236 Les gens l'ont consulté

Quelles formes PHP utilise-t-il pour implémenter le polymorphisme ?

En PHP5, le type des variables n'est pas défini. Une variable peut pointer vers n'importe quel type de valeur, chaîne, objet, ressource, etc. On ne peut pas dire que le polymorphisme en PHP5 est une variable.

Nous pouvons seulement dire qu'en PHP5, le polymorphisme est appliqué dans la position de l'indice de type des paramètres de la méthode. Tout objet de sous-classe d'une classe peut satisfaire à l'exigence de type avec le type actuel comme indice de type.
Toutes les classes qui implémentent cette interface peuvent répondre aux exigences des paramètres de méthode en utilisant le type d'interface comme indice de type. En termes simples, une classe possède l'identité de sa classe parent et des interfaces implémentées.

Réalisez le polymorphisme en implémentant des interfaces

<?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();
?>
Copier après la connexion

Simulez l'héritage multiple à l'aide des interfaces et de la composition

Simulez l'héritage multiple grâce à la composition. L'héritage multiple n'est pas pris en charge en PHP Si nous voulons utiliser les méthodes de plusieurs classes pour réaliser la réutilisation du code, existe-t-il un moyen ?

C'est la composition. Dans une classe, définissez une autre classe comme propriété.

L'exemple suivant simule l'héritage multiple.

Exemple d'interface

Écrivez un exemple conceptuel. Nous concevons un système de vente en ligne, et la partie utilisateur est conçue comme suit : Les utilisateurs sont divisés en trois types : NormalUser, VipUser et InnerUser. Il est nécessaire de calculer le prix du produit acheté par l'utilisateur en fonction des différentes remises accordées à l'utilisateur. Et nécessitent que de l'espace soit réservé pour une expansion et une maintenance futures.

<?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;
?>
Copier après la connexion

Tutoriel recommandé : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal