0Pricing
PHP Academy · Урок

Перечисления (перечислимые типы)

Определяйте типобезопасные наборы значений с помощью поддерживаемых и обычных перечислений PHP 8.1

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

Что такое перечисления?

В PHP 8.1 появились перечисления — специальный тип, ограничивающий переменную заранее определённым набором именованных значений и делающий код более выразительным и типобезопасным.

Чистое перечисление (перечисление без значения)

Чистое перечисление содержит именованные варианты без связанного значения. Оно отлично подходит для состояний, направлений или статусов.

<?php
enum Status {
    case Active;
    case Inactive;
    case Banned;
}

$s = Status::Active;
echo $s->name; // "Active"

Перечисление с базовым значением

Перечисление с базовым значением связывает с каждым вариантом скалярное значение (целое число или строку), что полезно для хранения в базе данных или передачи в ответах API.

<?php
enum Color: string {
    case Red   = "red";
    case Green = "green";
    case Blue  = "blue";
}

echo Color::Red->value; // "red"

From и TryFrom

Преобразуйте исходное значение обратно в вариант перечисления с помощью from() (вызывает исключение при недопустимом значении) или tryFrom() (возвращает null при недопустимом значении).

<?php
$color = Color::from("red");      // Color::Red
$maybe = Color::tryFrom("purple"); // null

Перечисления в подсказках типов

Используйте перечисления в качестве подсказок типов для параметров и возвращаемых значений — PHP гарантирует, что будут передаваться только допустимые варианты.

<?php
function paint(Color $color): void {
    echo "Painting with ".$color->value;
}
paint(Color::Blue); // "Painting with blue"

Варианты перечисления в match

Перечисления отлично сочетаются с выражениями match для исчерпывающей обработки.

<?php
$label = match($status) {
    Status::Active   => "Active user",
    Status::Inactive => "Inactive account",
    Status::Banned   => "Banned",
};
// PHP can warn if cases are unhandled

Перечисление реализует интерфейс

Перечисления могут реализовывать интерфейсы, обеспечивая полиморфное поведение.

<?php
interface HasLabel {
    public function label(): string;
}

enum Status: string implements HasLabel {
    case Active   = "active";
    case Inactive = "inactive";
    public function label(): string {
        return ucfirst($this->value);
    }
}

Методы перечислений

Перечисления могут содержать методы (но не конструктор и не изменяемые свойства).

<?php
enum Suit: string {
    case Hearts   = "H";
    case Diamonds = "D";
    case Clubs    = "C";
    case Spades   = "S";

    public function color(): string {
        return match($this) {
            Suit::Hearts, Suit::Diamonds => "red",
            Suit::Clubs,  Suit::Spades  => "black",
        };
    }
}

Константы перечислений

Перечисления могут содержать константы (но не варианты) для связанных скалярных значений.

<?php
enum Direction {
    case North;
    case South;
    const DEFAULT = self::North;
}

Перечисление вариантов

EnumName::cases() возвращает массив объектов всех вариантов перечисления — это удобно для создания вариантов выпадающего списка.

<?php
$options = Color::cases();
foreach ($options as $c) {
    echo $c->name.": ".$c->value."\n";
}

Перечисления и константы классов

Перечисления обеспечивают типобезопасность: нельзя случайно передать целое число 1 там, где ожидается перечисление Status. Константы классов такой гарантии не дают.

Итоги

Перечисления выражают фиксированные наборы значений с типобезопасностью. Используйте чистые перечисления для состояний, а перечисления с базовыми значениями — когда нужны значения для базы данных или API. Для безопасного разбора используйте tryFrom().

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

Что возвращает Color::tryFrom("недопустимое") при отсутствии совпадающего варианта?

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

Урок «Перечисления (перечислимые типы)» бесплатный?

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

Чему я научусь в уроке «Перечисления (перечислимые типы)»?

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

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

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

Сколько времени занимает урок «Перечисления (перечислимые типы)»?

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

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

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

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

  1. Выражение match и именованные аргументы
  2. Оператор nullsafe и объединённые типы
  3. Перечисления (перечислимые типы)
  4. Fibers: кооперативная многозадачность
← Назад к PHP Academy