PHP方法参数类型提示为父类时,子类实例能否传入执行?
问题解答
传入SubPage实例不会抛出异常,代码能正常运行。
原因分析
PHP的类型提示规则里,当方法参数指定为父类类型(这里是Page)时,传入该父类的子类实例(SubPage)是完全合法的——这是面向对象里的里氏替换原则:子类对象可以直接替换父类对象使用,不会破坏程序的正确性。
代码层面的逻辑
你给出的代码里:
SubPage通过extends Page明确继承了Page,所以SubPage实例本质上也属于Page类型。ABC类的testMethod要求参数是Page类型,不管传的是Page本身的实例,还是它的子类SubPage的实例,PHP都会判定参数类型符合要求,不会触发类型错误。
额外说明
这种设计是面向对象多态特性的基础,能让你在需要父类对象的场景下灵活使用子类对象,提升代码的扩展性与复用性。
内容的提问来源于stack exchange,提问作者svrl
相关产品推荐
相关产品推荐

