当前位置:首页 > PHP

php实现多态

2026-02-27 13:56:09PHP

多态的基本概念

多态是面向对象编程的三大特性之一,指同一操作作用于不同类的实例时产生不同的行为。PHP通过继承和接口实现多态。

通过继承实现多态

子类继承父类并重写父类方法,调用时根据对象类型执行对应方法:

php实现多态

class Animal {
    public function makeSound() {
        echo "Animal sound";
    }
}

class Dog extends Animal {
    public function makeSound() {
        echo "Bark";
    }
}

class Cat extends Animal {
    public function makeSound() {
        echo "Meow";
    }
}

function animalSound(Animal $animal) {
    $animal->makeSound();
}

$dog = new Dog();
$cat = new Cat();

animalSound($dog); // 输出: Bark
animalSound($cat); // 输出: Meow

通过接口实现多态

定义接口并让不同类实现相同接口:

interface Shape {
    public function calculateArea();
}

class Circle implements Shape {
    private $radius;

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

    public function calculateArea() {
        return pi() * pow($this->radius, 2);
    }
}

class Square implements Shape {
    private $side;

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

    public function calculateArea() {
        return pow($this->side, 2);
    }
}

function printArea(Shape $shape) {
    echo $shape->calculateArea();
}

$circle = new Circle(5);
$square = new Square(4);

printArea($circle); // 输出圆的面积
printArea($square); // 输出正方形的面积

抽象类实现多态

抽象类定义部分实现,强制子类实现特定方法:

php实现多态

abstract class Vehicle {
    abstract public function startEngine();
}

class Car extends Vehicle {
    public function startEngine() {
        echo "Car engine started";
    }
}

class Motorcycle extends Vehicle {
    public function startEngine() {
        echo "Motorcycle engine started";
    }
}

function startVehicle(Vehicle $vehicle) {
    $vehicle->startEngine();
}

$car = new Car();
$bike = new Motorcycle();

startVehicle($car); // 输出: Car engine started
startVehicle($bike); // 输出: Motorcycle engine started

类型提示与多态

PHP的类型提示确保参数符合特定类/接口,这是实现多态的关键:

function processPayment(PaymentGateway $gateway) {
    $gateway->process();
}

动态方法调用

PHP的__call魔术方法可以实现动态多态行为:

class DynamicHandler {
    public function __call($name, $arguments) {
        if ($name === 'process') {
            echo "Processing with " . get_class($arguments[0]);
        }
    }
}

标签: 多态php
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…