PHP.mk документација

ПОДДРЖАНИENUMЕРАЦИИ

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

language.enumerations.backed.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека language.enumerations.backed.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
ПОДДРЖАНИENUMЕРАЦИИ

Референца за `language.enumerations.backed.php` со подобрена типографија и навигација.

language.enumerations.backed.php

ПОДДРЖАНИENUMЕРАЦИИ

Стандардно, Enumerated Cases немаат скаларен еквивалент. Тие се едноставно синглтон објекти. Сепак, постојат многу случаи каде што Enumerated Case треба да може да се врати во база на податоци или сличен систем за складирање, па затоа е корисно да се има вграден скаларен (и со тоа лесно серијализиран) еквивалент дефиниран интринзично.

За да дефинирате скаларен еквивалент за Enumeration, синтаксата е следна:

<?php

enum Suit: string
{
case
Hearts = 'H';
case
Diamonds = 'D';
case
Clubs = 'C';
case
Spades = 'S';
}
?>

Случај што има скаларен еквивалент се нарекува Backed Case, бидејќи е „Поддржан“ од поедноставна вредност. Enum што содржи сите Backed Cases се нарекува „Backed Enum“. Backed Enum може да содржи само Backed Cases. Pure Enum може да содржи само Pure Cases.

Backed Enum може да биде поддржан од типови на int or string, а дадена енумерација поддржува само еден тип во исто време (т.е., нема унија од int|string). Ако енумерацијата е означена како што има скаларен еквивалент, тогаш сите случаи мора да имаат уникатен скаларен еквивалент дефиниран експлицитно. Нема автоматски генерирани скаларни еквиваленти (на пр., последователни цели броеви). Backed случаите мора да бидат уникатни; два backed enum случаи не смеат да имаат ист скаларен еквивалент. Сепак, константа може да се однесува на случај, ефективно создавајќи алијас. Види КОНСТАНТИ НАENUMЕРАЦИЈА.

Еквивалентните вредности може да бидат константни скаларни изрази. Пред PHP 8.2.0, еквивалентните вредности мораа да бидат литерали или литерални изрази. Ова значи дека константите и константните изрази не беа поддржани. Тоа е, 1 + 1 беше дозволено, но 1 + SOME_CONST не беше.

Backed Cases имаат дополнително својство само за читање, value, што е вредноста наведена во дефиницијата.

<?php

print Suit::Clubs->value;
// Prints "C"
?>

За да се спроведе value својството како само за читање, на променлива не може да ѝ се додели референца. Тоа е, следново фрла грешка:

<?php

$suit
= Suit::Clubs;
$ref = &$suit->value;
// Error: Cannot acquire reference to property Suit::$value
?>

Backed enums имплементираат внатрешен BackedEnum интерфејс, кој открива два дополнителни методи:

  • from(int|string): self ќе земе скалар и ќе го врати соодветниот Enum Case. Ако не се најде, ќе фрли ValueError. Ова е главно корисно во случаи кога влезната скаларна вредност е доверлива и недостасува вредност на enum треба да се смета за грешка што го запира работењето на апликацијата.
  • tryFrom(int|string): ?self ќе земе скалар и ќе го врати соодветниот Enum Case. Ако не се најде, ќе врати null. Ова е главно корисно во случаи кога влезната скаларна вредност не е доверлива и повикувачот сака да имплементира сопствено ракување со грешки или логика за вредност по дифолт.

На from() and tryFrom() методите ги следат стандардните правила за слабо/силно пишување. Во режим на слабо пишување, поминувањето на цел број или стринг е прифатливо и системот соодветно ќе ја присили вредноста. Поминувањето на float исто така ќе работи и ќе биде присилено. Во режим на строго пишување, поминувањето на цел број на from() на enum со подлога од стринг (или обратно) ќе резултира со TypeError, како и float во сите околности. Сите други типови на параметри ќе фрлат TypeError и во двата режима.

<?php

$record
= get_stuff_from_database($id);
print
$record['suit'];

$suit = Suit::from($record['suit']);
// Invalid data throws a ValueError: "X" is not a valid scalar value for enum "Suit"
print $suit->value;

$suit = Suit::tryFrom('A') ?? Suit::Spades;
// Invalid data returns null, so Suit::Spades is used instead.
print $suit->value;
?>

Рачно дефинирање на from() or tryFrom() метод на Backed Enum ќе резултира со фатална грешка.

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.