当前位置:首页 > 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可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…