PHP继承与多态通过extends单继承、方法重写、抽象类、接口及匿名类实现:子类复用父类成员并重写方法以支持运行时多态;抽象类定义契约,接口实现松耦合;匿名类用于临时多态验证。

如果您正在编写PHP面向对象程序,需要构建可扩展、易维护的类结构,则继承与多态是必须掌握的核心机制。以下是实现PHP继承与多态的具体写法:
一、使用extends关键字实现单继承
PHP仅支持单继承,子类通过extends关键字继承父类的public和protected成员,从而复用已有逻辑并建立“是一个”的语义关系。
1、定义父类,声明公共属性与方法,使用public或protected修饰符;
2、在子类声明中使用class ChildClass extends ParentClass语法;
3、子类中可通过$this->property访问继承的属性,通过$this->method()调用继承的方法;
4、若父类含构造函数且子类需初始化额外属性,必须显式调用parent::__construct(...);
5、子类可定义新方法,也可重写父类方法以提供特化行为。
二、通过方法重写实现运行时多态
多态依赖于方法重写(Override),即子类提供与父类同名、同参数签名的方法实现,使同一调用在不同对象上产生不同行为,这是动态绑定的基础。
1、确保父类方法为public或protected,且未被final修饰;
2、在子类中定义同名方法,参数数量与类型须严格一致;
3、重写方法内部可选择性调用parent::methodName()复用父类逻辑;
4、避免返回类型不兼容:PHP 7.2+要求子类重写方法的返回类型必须与父类协变(如父类返回Animal,子类可返回Dog);
5、在统一接口处(如函数参数类型提示为父类)传入不同子类实例,执行时自动调用对应重写版本。
三、借助抽象类强制多态契约
抽象类不能被实例化,但可定义抽象方法作为子类必须实现的契约,确保所有子类具备统一行为入口,为多态提供结构保障。
1、使用abstract class ClassName声明抽象类;
2、在抽象类中用abstract public function methodName();声明无方法体的抽象方法;
3、具体子类必须使用class ConcreteClass extends AbstractClass并实现全部抽象方法;
4、抽象类中可同时包含具体方法与属性,供所有子类直接复用;
5、类型提示可使用抽象类名,运行时由实际子类类型决定方法执行路径。
四、通过接口实现松耦合多态
接口定义行为规范而不提供实现,支持一个类实现多个接口,弥补PHP单继承限制,使多态更灵活、职责更清晰。
1、使用interface InterfaceName定义接口,其中所有方法默认为public且无实现;
2、类通过implements InterfaceName声明实现关系,多个接口用逗号分隔;
3、实现类必须定义接口中全部方法,否则报致命错误;
4、接口可被extends继承以形成层级规范,如interface Drawable extends Renderable;
5、函数参数或属性类型提示使用接口名,调用方无需关心具体实现类,真正实现“面向接口编程”。
五、利用匿名类快速验证多态行为
PHP 7.0+支持匿名类,适用于测试、回调或临时策略对象场景,在不定义具名类的前提下即时构造符合继承/实现关系的对象。
1、使用new class() extends ParentClass创建继承自某类的匿名实例;
2、使用new class() implements InterfaceA, InterfaceB实现多个接口;
3、在大括号内直接定义属性与方法,包括重写父类方法或实现接口方法;
4、匿名类可访问外部作用域的use变量,适合封装闭包逻辑;
5、匿名类不可序列化,也不支持反射获取类名,仅限一次性使用场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











