0Pricing
PHP Academy · Урок

Расширение классов с помощью наследования

Используйте extends для построения иерархий классов и переопределения методов

«Расширение классов с помощью наследования» — бесплатный урок PHP Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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 часто встречается во фреймворках, ORM и служебных уровнях. Понимание этой возможности подготовит Вас к участию в профессиональных проектах на PHP.

Распространённые ошибки

Избегайте этих ошибок при работе с наследованием в PHP:

  • Всегда вызывайте parent::__construct(), чтобы инициализировать состояние родителя
  • Не переопределяйте методы только ради вызова родительского метода без изменений
  • Используйте final для методов, критически важных для безопасности
  • Отдавайте предпочтение композиции, а не глубоким иерархиям наследования

Быстрая проверка

Какое ключевое слово запрещает переопределение метода в дочернем классе?

Итоги: наследование в PHP

Итоги:

  • Всегда вызывайте parent::__construct(), чтобы инициализировать состояние родителя
  • Не переопределяйте методы только ради вызова родительского метода без изменений
  • Используйте final для методов, критически важных для безопасности
  • Отдавайте предпочтение композиции, а не глубоким иерархиям наследования

Часто задаваемые вопросы

Урок «Расширение классов с помощью наследования» бесплатный?

Да — полный текст урока «Расширение классов с помощью наследования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Расширение классов с помощью наследования»?

Используйте extends для построения иерархий классов и переопределения методов Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Расширение классов с помощью наследования»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Расширение классов с помощью наследования
  2. Абстрактные классы и методы
  3. Реализация интерфейсов
  4. Трейты для повторного использования кода
← Назад к PHP Academy