当前位置:首页 > PHP

php 多态的实现

2026-02-16 06:42:03PHP

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(3);
$square = new Square(4);
printArea($circle); // 输出: 28.274...
printArea($square); // 输出: 16

通过抽象类实现多态

抽象类定义部分实现,子类完成具体行为:

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

class Car extends Vehicle {
    public function drive() {
        echo "Driving a car";
    }
}

class Bike extends Vehicle {
    public function drive() {
        echo "Riding a bike";
    }
}

function testDrive(Vehicle $vehicle) {
    $vehicle->drive();
}

$car = new Car();
$bike = new Bike();
testDrive($car);  // 输出: Driving a car
testDrive($bike); // 输出: Riding a bike

类型提示与多态

PHP 的类型提示(Type Hinting)允许在参数中指定接口或父类,实际传入的子类对象会自动匹配:

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

此方法兼容所有实现 PaymentGateway 接口的类。

动态特性实现多态

PHP 的动态特性允许运行时决定调用方法:

class DynamicExample {
    public function handle($type) {
        $method = 'handle' . ucfirst($type);
        if (method_exists($this, $method)) {
            $this->$method();
        }
    }

    private function handleA() {
        echo "Handling type A";
    }

    private function handleB() {
        echo "Handling type B";
    }
}

$obj = new DynamicExample();
$obj->handle('A'); // 输出: Handling type A
$obj->handle('B'); // 输出: Handling type B

注意事项

  • PHP 8.0 引入的联合类型和 match 表达式可增强多态处理能力
  • 避免过度使用动态方法调用,可能降低代码可读性
  • 接口更适合定义严格契约,抽象类适合共享部分实现

php 多态的实现

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

相关文章

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Rat…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php 路由实现

php 路由实现

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