PHP 继承怎么写
你有没有遇到过这样的情况:写代码时发现两个功能很像,只是多了一两个小细节不一样?比如你要做一个“学生管理系统”,先写了一个“人员”的基础类,里面有姓名、年龄这些通用信息,后来要做“老师”类,老师也有姓名和年龄,还要加个“教课程”的方法,难道要把“人员”类的代码再抄一遍吗?
这时候PHP的“继承”就能帮上大忙——它就像复制了一份基础模板,你只需要在模板上改改、加加内容,不用从头写重复的代码。

先搞懂两个核心角色
在PHP的继承里,有两个简单的称呼:
- 父类:就是刚才说的基础模板,也叫“基类”,放通用的属性和方法。比如“人员”类就是父类,有
$name(姓名)属性,还有sayHello()(自我介绍)方法。 - 子类:就是要修改或扩展的新类,也叫“派生类”,会继承父类的所有属性和方法,还能加自己的新内容。比如“老师”“学生”都可以当“人员”的子类。
举个生活化的例子:父类是“水果”,有“颜色”属性和“吃”的方法;子类是“苹果”,它会自动继承“颜色”和“吃”,还能加自己的“品种”属性。
怎么写继承?就用一个关键字
PHP里写继承特别简单,只要用extends关键字就行,格式就是“子类 extends 父类”。我们用代码来演示,保证一看就懂:
`php
// 1. 先写父类:人员
class Person {
// 通用属性:姓名、年龄
public $name;
public $age;
// 父类的方法:自我介绍
public function sayHello() {
echo "大家好,我是{$this->name},今年{$this->age}岁。";
}
}
// 2. 写子类:老师,继承Person
class Teacher extends Person {
// 子类加的专属属性:教的课程
public $subject;
// 子类的专属方法:上课
public function teach() {
echo "我教{$this->subject}。";
}
}
`
你看,子类Teacher虽然没写$name$age,但它已经从父类Person那里继承了,直接就能用。
子类还能“改”父类的方法?
如果父类的某个方法,在子类里要换个说法或加内容,不用重写整个父类,直接在子类里“重写”方法就行。比如老师的自我介绍要加“我是老师”,就可以这么写:
`php
class Teacher extends Person {
public $subject;
// 重写父类的sayHello方法
public function sayHello() {
// 先调用父类原来的自我介绍,再加自己的内容
parent::sayHello();
echo "我是一名老师,教{$this->subject}。";
}
public function teach() {
echo "我教{$this->subject}。";
}
}
`
这里的parent::就是专门用来调用父类方法的,相当于“回到父类那里,取原来的内容用一下”,比自己抄一遍父类代码省力气多了。
继承的小规则要注意
不是所有内容都能随便改:父类里用private修饰的属性或方法,子类是看不到也改不了的,就像父类的私密日记,子类拿不到;只有public(公开的)和protected(受保护的,子类也能访问)的内容,子类才能用或改。
最后用个实际的例子测试下:
`php
// 实例化一个老师对象
$teacher = new Teacher();
$teacher->name = "李老师";
$teacher->age = 35;
$teacher->subject = "数学";
// 输出:大家好,我是李老师,今年35岁。我是一名老师,教数学。
$teacher->sayHello();
// 输出:我教数学。
$teacher->teach();
`
是不是很清楚?继承的核心就是“复用父类的代码,只改需要改的部分”,写代码时能少很多重复劳动,还不容易出错。