0Pricing
PHP Academy · Урок

Абстрактные классы и методы

Определяйте частично реализованные базовые классы с помощью ключевого слова abstract

«Абстрактные классы и методы» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Введение: абстрактные классы

Абстрактный класс не может быть создан напрямую — это шаблон. Абстрактные методы объявляют сигнатуру без реализации, а дочерние классы должны предоставить их реализацию.

Ключевые понятия

Ключевые понятия:

  • Объявляются с помощью abstract class
  • У абстрактных методов нет тела: abstract public function x();
  • Дочерние классы должны реализовать все абстрактные методы
  • Могут содержать как абстрактные, так и обычные методы

Определение абстрактного класса

Пример:

<?php
abstract class Animal {
    public function __construct(protected string $name) {}

    // Must be implemented by each subclass
    abstract public function sound(): string;

    // Shared concrete method
    public function introduce(): string {
        return "I am {$this->name} and I say: " . $this->sound();
    }
}

Реализация абстрактных методов

Продолжение:

<?php
class Dog extends Animal {
    public function sound(): string { return 'Woof'; }
}

class Cat extends Animal {
    public function sound(): string { return 'Meow'; }
}

$animals = [new Dog('Rex'), new Cat('Whiskers')];
foreach ($animals as $a) {
    echo $a->introduce() . PHP_EOL;
}
// I am Rex and I say: Woof
// I am Whiskers and I say: Meow

Шаблонный метод

Подробнее:

<?php
abstract class DataProcessor {
    // Template method: defines the algorithm skeleton
    final public function process(array $data): array {
        $data = $this->validate($data);
        $data = $this->transform($data);
        return $this->format($data);
    }

    abstract protected function validate(array $data): array;
    abstract protected function transform(array $data): array;

    protected function format(array $data): array { return $data; }
}

Абстрактный класс и интерфейс

Практическое использование:

<?php
// Use abstract class when:
// - Subclasses share implementation code
// - You need constructor logic or state

// Use interface when:
// - Defining a contract (no implementation needed)
// - Multiple inheritance of type is needed

// A class can only extend ONE abstract class
// but can implement MULTIPLE interfaces

Частичная реализация

Расширенное использование:

<?php
abstract class Repository {
    // Concrete method available to all subclasses
    protected function findById(int $id, string $table): array {
        $stmt = $this->getDb()->prepare("SELECT * FROM $table WHERE id = ?");
        $stmt->execute([$id]);
        return $stmt->fetch(PDO::FETCH_ASSOC) ?: [];
    }

    abstract protected function getDb(): PDO;
    abstract public function find(int $id): array;
}

Шаблон

Распространённые шаблоны абстрактных классов помогают аккуратно решать регулярно возникающие задачи проектирования. Применяйте их последовательно, чтобы код оставался понятным и удобным для сопровождения.

Когда использовать

Знать, когда применять абстрактные классы, так же важно, как знать, как это делать. Чрезмерное использование приводит к усложнению, а недостаточное — к дублированию.

Пример из реального мира

В реальных приложениях абстрактные классы часто встречаются во фреймворках, ORM и служебных уровнях. Понимание этой возможности подготовит Вас к участию в профессиональных проектах на PHP.

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

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

  • Абстрактные классы нельзя создавать с помощью new
  • Все абстрактные методы должны быть реализованы в обычных дочерних классах
  • Используйте шаблонный метод для определения каркаса алгоритма
  • Абстрактные классы могут иметь конструкторы, свойства и обычные методы

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

Можно ли напрямую создать экземпляр абстрактного класса с помощью 'new'?

Итоги: абстрактные классы

Итоги:

  • Абстрактные классы нельзя создавать с помощью new
  • Все абстрактные методы должны быть реализованы в обычных дочерних классах
  • Используйте шаблонный метод для определения каркаса алгоритма
  • Абстрактные классы могут иметь конструкторы, свойства и обычные методы

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

Урок «Абстрактные классы и методы» бесплатный?

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

Чему я научусь в уроке «Абстрактные классы и методы»?

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

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

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

Сколько времени занимает урок «Абстрактные классы и методы»?

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

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

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

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

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