Maison > Article > développement back-end > Exemples détaillés de deux méthodes pour implémenter le polymorphisme PHP
Le concept de polymorphisme en Java fait référence au type d'objet vers lequel une variable peut pointer, qui est une sous-classe du type de déclaration de variable. Une fois un objet créé, son type reste inchangé. Le polymorphisme est une variable
En PHP5, le type d'une variable n'est pas défini. Une variable peut pointer vers n'importe quel type de valeur numérique, string, objets, ressources, 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 a l'identité de sa classe parent et l'interface implémentée.
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(); ?>
Utilisez les interfaces et la composition pour simuler plusieurs héritage
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 une combinaison. Dans une classe, définissez une autre classe sur l'attribut 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; ?>
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!