PHP的面向对象编程体系中,类的继承允许子类复用父类的属性和方法,同时可以在子类中扩展新的功能或者重写父类的已有方法,是提升代码复用率的重要特性。

PHP类继承的基础语法
PHP中使用extends关键字来实现类的继承,基本语法格式如下:
<?php
// 定义父类
class ParentClass {
public $name = '父类属性';
public function sayHello() {
echo '这是父类的方法';
}
}
// 子类继承父类,使用extends关键字
class ChildClass extends ParentClass {
// 子类可以新增自己的属性和方法
public function childMethod() {
echo '这是子类新增的方法';
}
}
?>
上述代码中,ChildClass通过extends关键字继承了ParentClass,因此ChildClass的实例可以直接访问父类的$name属性和sayHello方法。
子类访问父类成员的规则
子类继承父类后,访问父类成员需要遵循以下权限规则:
- 父类中声明为
public的属性和方法,子类可以直接访问 - 父类中声明为
protected的属性和方法,子类可以在类内部访问,但不能在类外部直接访问 - 父类中声明为
private的属性和方法,子类无法直接访问,也无法继承
下面是一个权限相关的示例:
<?php
class BaseClass {
public $publicProp = '公共属性';
protected $protectedProp = '受保护属性';
private $privateProp = '私有属性';
public function publicMethod() {
echo '公共方法';
}
protected function protectedMethod() {
echo '受保护方法';
}
private function privateMethod() {
echo '私有方法';
}
}
class SubClass extends BaseClass {
public function testAccess() {
echo $this->publicProp; // 正常输出:公共属性
echo $this->protectedProp; // 正常输出:受保护属性
// echo $this->privateProp; // 报错,无法访问父类私有属性
$this->publicMethod(); // 正常调用:公共方法
$this->protectedMethod(); // 正常调用:受保护方法
// $this->privateMethod(); // 报错,无法调用父类私有方法
}
}
$sub = new SubClass();
$sub->testAccess();
?>
parent关键字的使用
当子类重写了父类的方法,或者需要在子类中调用父类的构造方法时,可以使用parent关键字来引用父类的成员。
调用父类构造方法
如果父类定义了构造方法,子类重写构造方法时通常需要先调用父类的构造方法,避免父类初始化逻辑被遗漏:
<?php
class Animal {
protected $type;
public function __construct($type) {
$this->type = $type;
echo '动物类型:' . $this->type;
}
}
class Dog extends Animal {
protected $name;
public function __construct($type, $name) {
// 调用父类构造方法
parent::__construct($type);
$this->name = $name;
echo ',狗狗名字:' . $this->name;
}
}
$dog = new Dog('犬科', '旺财'); // 输出:动物类型:犬科,狗狗名字:旺财
?>
调用父类被重写的方法
子类重写父类方法后,若需要保留父类方法的原有逻辑,可以通过parent::方法名()的方式调用:
<?php
class Fruit {
public function describe() {
echo '这是水果';
}
}
class Apple extends Fruit {
public function describe() {
// 先调用父类的describe方法
parent::describe();
echo ',具体是苹果';
}
}
$apple = new Apple();
$apple->describe(); // 输出:这是水果,具体是苹果
?>
继承的注意事项
PHP的类继承有以下几点需要注意:
- PHP不支持多继承,一个子类只能继承一个父类,但是可以实现多个接口来达到类似多继承的效果
- 继承的层级没有严格限制,但是过深的继承层级会增加代码的维护成本,建议合理控制继承深度
- 子类重写父类方法时,访问权限不能比父类方法的权限更严格,比如父类方法是public,子类重写时不能是protected或者private
通过上述内容可以看出,PHP实现类继承的核心就是使用extends关键字,结合parent关键字可以完成父类成员的调用和重写逻辑的扩展,掌握这些语法就能灵活使用PHP的类继承特性了。