Maison > Article > développement back-end > 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(); ?>
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; ?>
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!