php继承必须用extends单继承已定义非final类,子类需显式调用parent::__construct()确保初始化,仅继承public/protected成员,private不可见,重写方法须遵守访问控制与final限制。

PHP 中的继承用 extends 实现,但不是“只要写了就能用”,关键在访问控制、构造函数传递和方法重写逻辑是否对齐。
子类声明必须用 extends,且只能单继承
PHP 不支持多继承,一个类只能 extends 一个父类。接口可用 implements 多实现,但那是另一套机制。
-
extends后面必须是已定义的类名,不能是变量或表达式 - 父类若被
final修饰,子类声明会直接报Fatal error: Class cannot extend final class - 如果父类在命名空间中,子类需用完整限定名或提前
use,否则会找不到类
父类的 private 成员子类不可见,别误以为能继承
很多初学者写完 extends 就默认所有属性方法都能在子类里调用,结果发现 $this->privateProp 报 Notice: Undefined property。
-
private成员只在定义它的类内部可访问,子类里完全不可见 - 想让子类能访问,父类中必须声明为
protected(推荐)或public - 子类中用
parent::methodName()可以显式调用父类的protected或public方法,但不能调用private方法
子类构造函数不自动调用父类 __construct()
这是最容易漏掉的点:子类写了自己的 __construct(),父类的初始化逻辑就彻底失效了。
- 除非手动写
parent::__construct(...),否则父类构造函数不会执行 - 参数要按父类签名传,比如父类是
__construct($name, $age),子类里就得parent::__construct($name, $age) - 如果父类构造函数有副作用(如连接数据库、初始化配置),跳过它很可能导致后续方法运行异常
重写父类方法时注意 static 和 final 限制
子类可以覆盖父类的非 final 方法,但规则比表面看起来更细。
- 父类方法若声明为
final,子类重写会触发Fatal error: Cannot override final method - 父类方法是
static,子类重写也必须加static,否则报Strict standards警告(PHP 8+ 默认报错) - 子类方法的访问级别不能比父类更严格,比如父类是
protected,子类不能改成private
继承不是复制粘贴代码,而是建立一种契约关系:子类承诺提供父类所要求的能力。漏掉 parent::__construct()、误用 private、忽略 final 限制,都会让这个契约在运行时突然断裂。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











