php多态实现
PHP 多态的实现方法
多态是面向对象编程的三大特性之一,PHP 主要通过继承和接口两种方式实现多态。
通过继承实现多态
继承方式的多态依赖于父类和子类的方法重写(Override)。

class Animal {
public function makeSound() {
echo "动物发出声音";
}
}
class Dog extends Animal {
public function makeSound() {
echo "汪汪汪";
}
}
class Cat extends Animal {
public function makeSound() {
echo "喵喵喵";
}
}
function animalSound(Animal $animal) {
$animal->makeSound();
}
$dog = new Dog();
$cat = new Cat();
animalSound($dog); // 输出: 汪汪汪
animalSound($cat); // 输出: 喵喵喵
通过接口实现多态
接口定义了一组方法规范,不同类可以实现相同的接口但提供不同的实现。
interface Shape {
public function draw();
}
class Circle implements Shape {
public function draw() {
echo "绘制圆形";
}
}
class Square implements Shape {
public function draw() {
echo "绘制方形";
}
}
function renderShape(Shape $shape) {
$shape->draw();
}
$circle = new Circle();
$square = new Square();
renderShape($circle); // 输出: 绘制圆形
renderShape($square); // 输出: 绘制方形
类型提示与多态
PHP 的类型提示机制可以确保传入的对象符合特定类或接口,这是实现多态的关键。

function process(PaymentInterface $payment) {
$payment->processPayment();
}
抽象类实现多态
抽象类介于普通类和接口之间,可以包含具体方法和抽象方法。
abstract class Vehicle {
abstract public function startEngine();
public function stopEngine() {
echo "引擎停止";
}
}
class Car extends Vehicle {
public function startEngine() {
echo "汽车引擎启动";
}
}
class Motorcycle extends Vehicle {
public function startEngine() {
echo "摩托车引擎启动";
}
}
方法重载(伪多态)
PHP 不支持传统的方法重载,但可以通过魔术方法 __call() 实现类似效果。
class Overload {
public function __call($name, $arguments) {
if ($name == 'test') {
if (count($arguments) == 1) {
return $this->testWithOneArg($arguments[0]);
} elseif (count($arguments) == 2) {
return $this->testWithTwoArgs($arguments[0], $arguments[1]);
}
}
}
private function testWithOneArg($a) {
echo "一个参数: $a";
}
private function testWithTwoArgs($a, $b) {
echo "两个参数: $a, $b";
}
}
多态的实现使代码更灵活,更容易扩展和维护,是面向对象设计中重要的概念。






