当前位置:首页 > 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实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php 实现接口

php 实现接口

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

php队列的实现

php队列的实现

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

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现域名

php实现域名

PHP实现域名操作的方法 获取当前域名 使用$_SERVER['HTTP_HOST']可以获取当前访问的域名: $currentDomain = $_SERVER['HTTP_HOST']; ech…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…