How to implement polymorphism in PHP?

WBOY
Release: 2024-06-04 15:17:00
Original
570 people have browsed it

Polymorphism in PHP allows different objects to share the same interface while having unique behaviors. Implementation through interfaces and abstract classes: Interfaces define method signatures without providing implementations. The object must implement all methods in the interface. Abstract classes contain unimplemented methods that can only be implemented in subclasses. Practical example: Define the animal behavior interface AnimalActions. Define the abstract animal class Animal, which has abstract method makeSound. Create concrete animal classes Dog and Cat, implement AnimalActions and makeSound. Create a Zoo class to manage animals. Add animals to Zoo and execute their talk method, outputting "Buddy barks." and "Fluffy meows."

How to implement polymorphism in PHP?

Polymorphism in PHP

Polymorphism is an important feature in object-oriented programming that allows different Objects share the same interface while maintaining their own unique behavior. In PHP, polymorphism can be achieved using interfaces and abstract classes.

Interface

An interface defines a list of method signatures without providing an actual implementation. Objects must implement all methods defined in the interface, which allows objects with different specific behaviors to be considered types of the same interface.

interface Vehicle {
    public function start();
    public function stop();
    public function drive();
}
Copy after login

Abstract class

An abstract class is a class that contains at least one unimplemented method. Abstract methods can only be implemented in subclasses of abstract classes, providing specific behaviors for different subclasses.

abstract class Animal {
    abstract public function makeSound();
}
Copy after login

Practical Example: Zoo

Consider the example of a zoo where animals have different behaviors. We can use interfaces and abstract classes to define the public behavior and specific implementation of animals.

Interface

interface AnimalActions {
    public function talk();
    public function walk();
    public function eat();
}
Copy after login

Abstract class

abstract class Animal {
    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    abstract public function makeSound();
}
Copy after login

Concrete class

class Dog extends Animal implements AnimalActions {
    public function __construct($name) {
        parent::__construct($name);
    }

    public function talk() {
        echo "{$this->name} barks.\n";
    }

    public function walk() {
        echo "{$this->name} walks.\n";
    }

    public function eat() {
        echo "{$this->name} eats dog food.\n";
    }

    public function makeSound() {
        echo "Woof!\n";
    }
}

class Cat extends Animal implements AnimalActions {
    public function __construct($name) {
        parent::__construct($name);
    }

    public function talk() {
        echo "{$this->name} meows.\n";
    }

    public function walk() {
        echo "{$this->name} slinks.\n";
    }

    public function eat() {
        echo "{$this->name} eats cat food.\n";
    }

    public function makeSound() {
        echo "Meow!\n";
    }
}
Copy after login

Using

we can create a zoo class to manage animals:

class Zoo {
    private $animals = [];

    public function addAnimal(AnimalActions $animal) {
        $this->animals[] = $animal;
    }

    public function letAnimalsTalk() {
        foreach ($this->animals as $animal) {
            $animal->talk();
        }
    }
}
Copy after login

In the main script we can create a zoo, add animals, and then make them talk:

$zoo = new Zoo();
$zoo->addAnimal(new Dog('Buddy'));
$zoo->addAnimal(new Cat('Fluffy'));
$zoo->letAnimalsTalk();
Copy after login

This will output:

Buddy barks.
Fluffy meows.
Copy after login

The above is the detailed content of How to implement polymorphism in PHP?. For more information, please follow other related articles on the PHP Chinese website!

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!