当前位置:首页 > PHP

php 实现多态

2026-02-13 16:40:03PHP

PHP 实现多态的方法

多态是面向对象编程的三大特性之一,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 draw();
}

class Circle implements Shape {
    public function draw() {
        echo "Drawing circle";
    }
}

class Square implements Shape {
    public function draw() {
        echo "Drawing square";
    }
}

function renderShape(Shape $shape) {
    $shape->draw();
}

$circle = new Circle();
$square = new Square();
renderShape($circle); // 输出: Drawing circle
renderShape($square); // 输出: Drawing square

抽象类实现多态

抽象类定义抽象方法,子类必须实现这些方法。

php 实现多态

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

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

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

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

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

方法重载(魔术方法)

PHP 不支持传统方法重载,但可通过 __call 魔术方法模拟。

class Overload {
    public function __call($name, $arguments) {
        if ($name === 'test') {
            if (count($arguments) === 1) {
                echo "Called with 1 argument";
            } elseif (count($arguments) === 2) {
                echo "Called with 2 arguments";
            }
        }
    }
}

$obj = new Overload();
$obj->test(1); // 输出: Called with 1 argument
$obj->test(1, 2); // 输出: Called with 2 arguments

类型提示与多态

PHP 的类型提示功能可确保参数实现特定接口或继承特定类。

interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        echo "Log to file: $message";
    }
}

class DatabaseLogger implements Logger {
    public function log($message) {
        echo "Log to database: $message";
    }
}

function logMessage(Logger $logger, $message) {
    $logger->log($message);
}

$fileLogger = new FileLogger();
$dbLogger = new DatabaseLogger();
logMessage($fileLogger, "Test message"); // 输出: Log to file: Test message
logMessage($dbLogger, "Test message"); // 输出: Log to database: Test message

以上方法展示了 PHP 中实现多态的不同方式,开发者可根据具体需求选择合适的方法。

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

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php验证码实现

php验证码实现

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

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUTO…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…