php多态实现uml
PHP多态实现与UML建模
多态是面向对象编程的核心概念之一,PHP通过继承和接口实现多态。以下是PHP多态的实现方式及对应的UML建模方法。
通过继承实现多态
继承是实现多态的经典方式,子类重写父类方法,运行时根据对象类型调用相应方法。
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
UML类图表示:

Animal类作为父类Dog和Cat类继承Animal类- 关联线从
Dog和Cat指向Animal,箭头为空心三角形
通过接口实现多态
接口定义规范,不同类实现相同接口但行为不同。
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
UML类图表示:

Shape接口用带<<interface>>的类表示Circle和Square类实现Shape接口- 关联线从实现类指向接口,箭头为空心三角形加虚线
抽象类实现多态
抽象类介于普通类和接口之间,可以包含实现和抽象方法。
abstract class Vehicle {
abstract public function move();
public function startEngine() {
echo "Engine started";
}
}
class Car extends Vehicle {
public function move() {
echo "Car is moving";
}
}
class Boat extends Vehicle {
public function move() {
echo "Boat is sailing";
}
}
function operateVehicle(Vehicle $vehicle) {
$vehicle->startEngine();
$vehicle->move();
}
$car = new Car();
$boat = new Boat();
operateVehicle($car); // 输出: Engine started\nCar is moving
operateVehicle($boat); // 输出: Engine started\nBoat is sailing
UML类图表示:
Vehicle抽象类用斜体名称表示Car和Boat类继承Vehicle- 关联线从子类指向父类,箭头为空心三角形
UML多态关系表示要点
- 继承关系用实线空心三角形箭头表示,箭头指向父类
- 接口实现用虚线空心三角形箭头表示,箭头指向接口
- 抽象类名称在UML中用斜体表示
- 多态方法通常在父类/接口中定义,子类中重写
- 客户端代码依赖抽象类型而非具体实现
PHP多态最佳实践
- 优先使用接口定义多态行为
- 合理使用抽象类减少代码重复
- 遵循里氏替换原则,子类不应破坏父类行为
- 类型提示使用抽象类型(接口/抽象类)
- 避免过度使用继承,防止类层次过深
通过以上方法可以在PHP中有效实现多态,并通过UML清晰表达多态关系设计。UML类图能直观展示类之间的继承和实现关系,帮助理解多态结构。






