PHP.nl

Basic enumerations

Basis enumeraties

Enums zijn vergelijkbaar met klassen en delen dezelfde namespaces als klassen, interfaces en traits. Ze zijn ook op dezelfde manier autoloadable. Een Enum definieert een nieuw type, dat een vast, beperkt aantal mogelijke legale waarden heeft.

<?php

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

Deze declaratie creëert een nieuw enumeratietype genaamd , dat vier en slechts vier legale waarden heeft: , , , en . Variabelen kunnen worden toegewezen aan een van die legale waarden. Een functie kan type gecontroleerd worden tegen een enumeratietype, in welk geval alleen waarden van dat type kunnen worden doorgegeven. Suit``Suit::Hearts``Suit::Diamonds``Suit::Clubs``Suit::Spades

<?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) moet van het type Suit zijn, string gegeven
pick_a_card('Spades');
?>

Een Enumeratie kan nul of meer case-definities hebben, zonder maximum. Een zero-case enum is syntactisch geldig, zij het tamelijk nutteloos. case

Voor Enumeratie cases gelden dezelfde syntaxisregels als voor elk label in PHP, zie . Constanten

Standaard zijn cases niet intrinsiek gekoppeld aan een scalair waarde. Dat wil zeggen, is niet gelijk aan . In plaats daarvan is elke case gekoppeld aan een singleton-object van die naam. Dat betekent dat: Suit::Hearts``"0"

<?php

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

$a === $b; // true

$a instanceof Suit;  // true
?>

Het betekent ook dat enum-waarden nooit of elkaar zijn, aangezien die vergelijkingen niet betekenisvol zijn voor objecten. Die vergelijkingen zullen altijd false retourneren wanneer je met enum-waarden werkt. &lt;``&gt;

Dit type case, zonder gerelateerde data, wordt een "Pure Case" genoemd. Een Enum die alleen Pure Cases bevat, wordt een Pure Enum genoemd.

Alle Pure Cases zijn geïmplementeerd als instanties van hun enum-type. Het enum-type wordt intern weergegeven als een klasse.

Alle Cases hebben een alleen-lezen eigenschap, , die de case-sensitive naam van de case zelf is. name

<?php

print Suit::Spades->name;
// prints "Spades"
?>

Het is ook mogelijk om de en functies te gebruiken om de aanwezigheid van of het lezen van een enum-case te controleren als de naam dynamisch wordt verkregen. Dit wordt echter afgeraden, aangezien het gebruik van zou moeten werken voor de meeste gebruiksgevallen. defined``constantBacked enums

Documentatie