php实现多态继承
多态的概念
多态是面向对象编程的三大特性之一,指同一操作作用于不同类的实例时,会产生不同的行为。在PHP中,多态通常通过继承和接口实现,允许子类重写父类方法或实现接口定义的方法。
通过继承实现多态
-
定义父类
父类声明通用方法,子类通过重写(Override)这些方法实现多态。class Animal { public function makeSound() { echo "Animal sound\n"; } } -
子类重写方法
子类继承父类并重写方法,实现不同行为。class Dog extends Animal { public function makeSound() { echo "Bark\n"; } } class Cat extends Animal { public function makeSound() { echo "Meow\n"; } } -
调用多态方法
通过父类类型变量调用方法,实际执行子类实现。function animalSound(Animal $animal) { $animal->makeSound(); } animalSound(new Dog()); // 输出: Bark animalSound(new Cat()); // 输出: Meow
通过接口实现多态
-
定义接口
接口声明方法规范,由实现类具体实现。interface Shape { public function calculateArea(); } -
实现接口
不同类实现同一接口,提供不同逻辑。class Circle implements Shape { private $radius; public function __construct($radius) { $this->radius = $radius; } public function calculateArea() { return pi() * $this->radius 2; } } class Square implements Shape { private $side; public function __construct($side) { $this->side = $side; } public function calculateArea() { return $this->side 2; } } -
调用接口方法
通过接口类型变量调用方法,执行具体实现类的逻辑。function printArea(Shape $shape) { echo "Area: " . $shape->calculateArea() . "\n"; } printArea(new Circle(5)); // 输出: Area: 78.539816339745 printArea(new Square(4)); // 输出: Area: 16
关键注意事项
- 类型提示:使用父类或接口类型提示参数,确保多态调用安全。
- 抽象类:若需部分实现,可用抽象类替代接口,结合
abstract方法。 instanceof检查:运行时需确认对象类型时,可用$obj instanceof ClassName。
通过继承或接口实现多态,能显著提升代码的扩展性和可维护性。







