PHP.nl

Basic limited values

Voorbeeld: Basic limited values

<?php

enum SortOrder
{
    case Asc;
    case Desc;
}

function query($fields, $filter, SortOrder $order = SortOrder::Asc)
{
     /* ... */
}
?>
 The  function can now proceed safe in the knowledge that
  is guaranteed to be either 
 or . Any other value would have resulted in a
 , so no further error checking or testing is needed.
`query()``$order``SortOrder::Asc``SortOrder::Desc``TypeError`

Voorbeeld: Advanced exclusive values

<?php

enum UserStatus: string
{
    case Pending = 'P';
    case Active = 'A';
    case Suspended = 'S';
    case CanceledByUser = 'C';

    public function label(): string
    {
        return match($this) {
            self::Pending => 'Pending',
            self::Active => 'Active',
            self::Suspended => 'Suspended',
            self::CanceledByUser => 'Canceled by user',
        };
    }
}
?>
 In this example, a user's status may be one of, and exclusively, ,
 , , or
 . A function can type a parameter against
  and then only accept those four values, period.
`UserStatus::Pending``UserStatus::Active``UserStatus::Suspended``UserStatus::CanceledByUser``UserStatus`


 All four values have a  method, which returns a human-readable string.
 That string is independent of the "machine name" scalar equivalent string, which can be used in,
 for example, a database field or an HTML select box.
`label()`
<?php

foreach (UserStatus::cases() as $case) {
    printf('<option value="%s">%s</option>\n', $case->value, $case->label());
}
?>