Sharing examples of two methods to implement polymorphism in PHP5_PHP Tutorial

WBOY
Release: 2016-07-13 10:32:01
Original
938 people have browsed it

In PHP5, the type of variables is undefined. A variable can point to any type of numerical value, string, object, resource, etc. We cannot say that polymorphism in PHP5 is a variable.

We can only say that in PHP5, polymorphism is applied in the type hint position of method parameters.
Any subclass object of a class can satisfy the type requirement with the current type as a type hint.
All classes that implement this interface can meet the method parameter requirements using the interface type as a type hint.
Simply put, a class has the identity of its parent class and implemented interface.

Polymorphism is achieved by implementing interfaces

Copy code The code is as follows:

interface User{ // User interface
public function getName();
public function setName($_name);
}

class NormalUser implements User { // Implement the interface Class.
private $name;
public function getName(){
return $this->name;
}
public function setName($_name){
$this ->name = $_name;
}
}

class UserAdmin{ //Operation.
public static function ChangeUserName(User $_user,$_userName){
$_user ->setName($_userName);
}
}

$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//here What is passed in is an instance of NormalUser.
echo $normalUser->getName();
?>

Use interfaces and composition to simulate multiple inheritance

Simulate multiple inheritance through composition.

Multiple inheritance is not supported in PHP. If we want to use the methods of multiple classes to achieve code reuse, is there any way?

That’s the combination. In one class, set another class as a property.

The following example simulates multiple inheritance.

Interface instance

Write a conceptual example. We design an online sales system, and the user part is designed as follows: Users are divided into three types: NormalUser, VipUser, and InnerUser. It is required to calculate the price of the product purchased by the user based on the user's different discounts. And require space to be reserved for future expansion and maintenance.

Copy code The code is as follows:

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() . "
";
$str .= "您的级别是" . $user->getGrade() . "
";
$str .= "您的折扣是" . $user->getDiscount() . "
";
$str .= "您的价格是" . $price;
echo $str;
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/756991.htmlTechArticle在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。 我们只能...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template