Grundläggande uppräkningar

Från Wiki.linux.se
Version från den 19 augusti 2024 kl. 17.03 av Admin (diskussion | bidrag) (Skapade sidan med ' == Grundläggande Enumerations == Enums liknar klasser och delar samma namnrymder som klasser, gränssnitt och traits. De kan också autoladdas på samma sätt. En Enum definierar en ny typ, som har ett fast och begränsat antal möjliga giltiga värden. <pre> <?php enum Suit { case Hearts; case Diamonds; case Clubs; case Spades; } ?> </pre> Denna deklaration skapar en ny uppräknad typ med namnet `Suit`, som har fyra och endast fyra giltiga värden:...')
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

Grundläggande Enumerations

Enums liknar klasser och delar samma namnrymder som klasser, gränssnitt och traits. De kan också autoladdas på samma sätt. En Enum definierar en ny typ, som har ett fast och begränsat antal möjliga giltiga värden.

<?php

enum Suit
{
    case Hearts;
    case Diamonds;
    case Clubs;
    case Spades;
}
?>

Denna deklaration skapar en ny uppräknad typ med namnet `Suit`, som har fyra och endast fyra giltiga värden: `Suit::Hearts`, `Suit::Diamonds`, `Suit::Clubs`, och `Suit::Spades`. Variabler kan tilldelas ett av dessa giltiga värden. En funktion kan typkontrolleras mot en uppräknad typ, i vilket fall endast värden av den typen kan passera.

<?php

function pick_a_card(Suit $suit)
{
    /* ... */
}

$val = Suit::Diamonds;

// OK
pick_a_card($val);

// OK
pick_a_card(Suit::Clubs);

// TypeError: pick_a_card(): Argument #1 ($suit) måste vara av typen Suit, string given
pick_a_card('Spades');
?>

En Enum kan ha noll eller fler case-definitioner, utan något maximum. En enum med noll case är syntaktiskt giltig, om än ganska värdelös.

För Enum-cases gäller samma syntaxregler som för vilken etikett som helst i PHP, se Constants.

Som standard stöds inte case med ett skalarvärde. Det vill säga, `Suit::Hearts` är inte lika med "0". Istället stöds varje case av ett singleton-objekt med det namnet. Det betyder att:

<?php

$a = Suit::Spades;
$b = Suit::Spades;

$a === $b; // true

$a instanceof Suit;  // true
?>

Det innebär också att enum-värden aldrig är < eller > varandra, eftersom dessa jämförelser inte är meningsfulla på objekt. Dessa jämförelser returnerar alltid false när man arbetar med enum-värden.

Denna typ av case, utan relaterad data, kallas för ett "Pure Case." En Enum som bara innehåller Pure Cases kallas för en Pure Enum.

Alla Pure Cases implementeras som instanser av deras enum-typ. Enum-typen representeras internt som en klass.

Alla Cases har en skrivskyddad egenskap, `name`, som är det skiftlägeskänsliga namnet på caset självt.

<?php

print Suit::Spades->name;
// skriver ut "Spades"
?>

Det är också möjligt att använda funktionerna `defined()` och `constant()` för att kontrollera existensen av eller läsa ett enum-case om namnet erhålls dynamiskt. Detta är dock avrådd eftersom användningen av Backed enums borde fungera för de flesta användningsfall.


Sidslut

Orginalhemsidan på Engelska : https://www.php.net/manual/en/language.enumerations.basics.php
PHP
Språkreferens
Språkreferens#Uppräkningar


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/