使用继承扩展类
使用 extends 构建类层次结构,并重写方法。
使用继承扩展类 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
简介:PHP 继承
继承允许一个类(子类)使用 extends 关键字重用并扩展另一个类(父类)的代码。PHP 支持单继承。
核心概念
核心概念:
- 子类会继承所有公共成员和受保护成员
- 重写父类方法以改变行为
- 使用
parent::调用父类方法 - 使用
final防止方法被重写
基本 extends
示例:
<?php
class Shape {
public function __construct(protected string $color) {}
public function describe(): string { return "A {$this->color} shape"; }
}
class Circle extends Shape {
public function __construct(string $color, private float $radius) {
parent::__construct($color);
}
public function area(): float { return M_PI * $this->radius ** 2; }
}
$c = new Circle('red', 5);
echo $c->describe(); // A red shape
echo round($c->area()); // 79方法重写
继续:
<?php
class Logger {
public function log(string $msg): void {
echo "[LOG] $msg" . PHP_EOL;
}
}
class DatabaseLogger extends Logger {
public function log(string $msg): void {
// Extend parent behavior
parent::log($msg);
// Also save to DB
echo "[DB] Saved: $msg" . PHP_EOL;
}
}
$l = new DatabaseLogger();
$l->log('User login');final 关键字
深入理解:
<?php
class PaymentProcessor {
final public function processPayment(float $amount): void {
// Critical logic — cannot be overridden
$this->validate($amount);
$this->charge($amount);
$this->log($amount);
}
protected function validate(float $amount): void { /* ... */ }
protected function charge(float $amount): void { /* ... */ }
protected function log(float $amount): void { /* ... */ }
}instanceof 检查
实际应用:
<?php
class Vehicle {}
class Car extends Vehicle {}
class ElectricCar extends Car {}
$ev = new ElectricCar();
var_dump($ev instanceof ElectricCar); // true
var_dump($ev instanceof Car); // true
var_dump($ev instanceof Vehicle); // true
// Also works with interfaces
var_dump($ev instanceof Countable); // false抽象基类
高级内容:
<?php
abstract class Notification {
abstract public function send(string $message): bool;
public function sendBatch(array $messages): void {
foreach ($messages as $msg) {
$this->send($msg);
}
}
}
class EmailNotification extends Notification {
public function send(string $message): bool {
echo "Email: $message" . PHP_EOL;
return true;
}
}模式
常见的 PHP 继承模式用于简洁地解决反复出现的设计问题。请始终一致地应用这些模式,以编写易读且易维护的代码。
适用时机
了解何时应用 PHP 继承,与了解如何应用同样重要。过度使用会导致复杂性,不充分使用则会导致重复。
实际应用示例
在实际应用中,PHP 继承经常出现在框架、对象关系映射器和服务层中。理解继承有助于您参与专业的 PHP 项目。
常见问题
请避免在使用 PHP 继承时犯以下错误:
- 始终调用 parent::__construct(),以初始化父类状态
- 不要为了调用父类且不做任何更改而重写方法
- 对安全关键方法使用 final
- 优先使用组合,而不是深层继承层次结构
快速检查
哪个关键字可以防止方法在子类中被重写?
回顾:PHP 继承
总结:
- 始终调用 parent::__construct(),以初始化父类状态
- 不要为了调用父类且不做任何更改而重写方法
- 对安全关键方法使用 final
- 优先使用组合,而不是深层继承层次结构
常见问题解答
「使用继承扩展类」课时是免费的吗?
是的 — 「使用继承扩展类」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「使用继承扩展类」这节课中我会学到什么?
使用 extends 构建类层次结构,并重写方法。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「使用继承扩展类」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用继承扩展类
- 抽象类与抽象方法
- 实现接口
- 使用 Trait 复用代码