当前位置:首页 > PHP

php多态实现uml

2026-02-15 12:06:35PHP

PHP多态实现与UML表示

多态是面向对象编程的核心概念之一,允许不同类的对象对同一消息做出响应。PHP通过继承和接口实现多态,UML类图可清晰描述这种关系。

通过继承实现多态

基类定义通用方法,子类重写该方法实现不同行为:

class Animal {
    public function makeSound() {
        return "Generic animal sound";
    }
}

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

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

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

$dog = new Dog();
$cat = new Cat();
animalSound($dog); // 输出: Bark
animalSound($cat); // 输出: Meow

UML表示:

  • 基类Animal与子类DogCat之间用带空心三角箭头的实线连接(泛化关系)
  • 所有类包含makeSound()方法,子类方法前标注{redefined}

通过接口实现多态

接口定义契约,不同类实现相同接口但行为不同:

interface Payment {
    public function pay($amount);
}

class CreditCardPayment implements Payment {
    public function pay($amount) {
        echo "Paying $amount via Credit Card";
    }
}

class PayPalPayment implements Payment {
    public function pay($amount) {
        echo "Paying $amount via PayPal";
    }
}

function processPayment(Payment $payment, $amount) {
    $payment->pay($amount);
}

$creditCard = new CreditCardPayment();
$paypal = new PayPalPayment();
processPayment($creditCard, 100);
processPayment($paypal, 200);

UML表示:

  • 接口Payment与实现类之间用带空心三角箭头的虚线连接(实现关系)
  • 接口名称上方标注<<interface>>构造型
  • 所有实现类必须包含接口定义的pay()方法

抽象类实现多态

抽象类结合继承和接口特点:

abstract class Shape {
    abstract public function calculateArea();
}

class Circle extends Shape {
    private $radius;

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

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

class Square extends Shape {
    private $side;

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

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

function printArea(Shape $shape) {
    echo "Area: " . $shape->calculateArea();
}

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

UML表示:

php多态实现uml

  • 抽象类Shape名称用斜体表示
  • 抽象方法calculateArea()同样用斜体标注
  • 子类与抽象类之间用泛化关系连接

UML多态关系要点

  1. 泛化关系(继承):空心三角箭头+实线,表示"is-a"关系
  2. 实现关系(接口):空心三角箭头+虚线,表示契约实现
  3. 抽象元素:类名和方法名使用斜体表示
  4. 方法覆盖:子类重写方法可添加{redefined}标注
  5. 多态调用:在UML序列图中可展示运行时对象类型与动态绑定

多态实现的关键在于统一接口不同实现,UML通过清晰的类关系和标注展示这种灵活性。实际建模时应根据具体场景选择继承或接口方式。

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

相关文章

php实现文件下载

php实现文件下载

PHP 实现文件下载的方法 使用 header() 函数强制下载 设置正确的 HTTP 头信息,强制浏览器下载文件而不是直接打开。 $file = 'path/to/file.pdf'; if (f…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

php 伪静态实现

php 伪静态实现

PHP 伪静态实现方法 伪静态(URL Rewrite)是一种通过服务器配置将动态URL转换为静态URL的技术,提升URL的可读性和SEO效果。以下是几种常见的实现方式: 使用Apache的mod_…