Wyliczenia (enumy)
Definiuj bezpieczne typowo zbiory wartości za pomocą wyliczeń backed i pure w PHP 8.1
Wyliczenia (enumy) to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Czym są enumy?
PHP 8.1 wprowadził enumy — specjalny typ, który ogranicza zmienną do zdefiniowanego zbioru nazwanych wartości, dzięki czemu kod jest bardziej wyrazisty i bezpieczny typowo.
Czysty enum (enum jednostkowy)
Czysty enum ma nazwane przypadki bez powiązanej wartości. Doskonale nadaje się do reprezentowania stanu, kierunku lub statusu.
<?php
enum Status {
case Active;
case Inactive;
case Banned;
}
$s = Status::Active;
echo $s->name; // "Active"Enum z wartością bazową
Enum z wartością bazową przypisuje każdemu przypadkowi wartość skalarną (int lub string) — jest to przydatne przy przechowywaniu danych w bazie lub zwracaniu odpowiedzi API.
<?php
enum Color: string {
case Red = "red";
case Green = "green";
case Blue = "blue";
}
echo Color::Red->value; // "red"From i TryFrom
Surową wartość można z powrotem przekonwertować na przypadek enumu za pomocą from() (zgłasza wyjątek dla nieprawidłowej wartości) lub tryFrom() (zwraca null dla nieprawidłowej wartości).
<?php
$color = Color::from("red"); // Color::Red
$maybe = Color::tryFrom("purple"); // nullEnumy w deklaracjach typów
Enumów można używać jako deklaracji typów parametrów i wartości zwracanych — PHP wymusza przekazywanie wyłącznie prawidłowych przypadków.
<?php
function paint(Color $color): void {
echo "Painting with ".$color->value;
}
paint(Color::Blue); // "Painting with blue"Przypadki enumów w match
Enumy doskonale współpracują z wyrażeniami match, umożliwiając wyczerpującą obsługę wszystkich przypadków.
<?php
$label = match($status) {
Status::Active => "Active user",
Status::Inactive => "Inactive account",
Status::Banned => "Banned",
};
// PHP can warn if cases are unhandledEnum implementuje interfejs
Enumy mogą implementować interfejsy, co pozwala uzyskać zachowanie polimorficzne.
<?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);
}
}Metody enumów
Enumy mogą zawierać metody (ale nie konstruktor ani modyfikowalne właściwości).
<?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",
};
}
}Stałe enumów
Enumy mogą zawierać stałe (nie przypadki) przechowujące powiązane wartości skalarne.
<?php
enum Direction {
case North;
case South;
const DEFAULT = self::North;
}Wyświetlanie przypadków
EnumName::cases() zwraca tablicę wszystkich obiektów przypadków enumu — jest to przydatne przy generowaniu opcji list rozwijanych.
<?php
$options = Color::cases();
foreach ($options as $c) {
echo $c->name.": ".$c->value."\n";
}Enumy a stałe klas
Enumy zapewniają bezpieczeństwo typów — nie można przypadkowo przekazać liczby całkowitej 1 tam, gdzie oczekiwany jest enum Status. Stałe klas nie dają takiej gwarancji.
Podsumowanie
Enumy wyrażają ustalone zbiory wartości z zachowaniem bezpieczeństwa typów. Czystych enumów należy używać do reprezentowania stanu, a enumów z wartością bazową, gdy potrzebne są wartości z bazy danych lub API. Do bezpiecznego parsowania należy używać tryFrom().
Szybkie sprawdzenie
Co zwraca Color::tryFrom("invalid"), jeśli żaden przypadek nie pasuje?
Często zadawane pytania
Czy lekcja „Wyliczenia (enumy)” jest bezpłatna?
Tak — pełny tekst „Wyliczenia (enumy)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wyliczenia (enumy)”?
Definiuj bezpieczne typowo zbiory wartości za pomocą wyliczeń backed i pure w PHP 8.1 Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Wyliczenia (enumy)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wyrażenie match i argumenty nazwane
- Operator nullsafe i typy sum
- Wyliczenia (enumy)
- Fibers: współbieżność kooperacyjna