0Pricing
PHP Academy · 课时

使用继承扩展类

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用继承扩展类
  2. 抽象类与抽象方法
  3. 实现接口
  4. 使用 Trait 复用代码
← 返回 PHP Academy