You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Un Enum (o enumeración) define un nuevo tipo, que tiene un número fijo y limitado de posibles valores.
1557
+
1558
+
```php
1559
+
enum Status
1560
+
{
1561
+
case DRAFT;
1562
+
case PUBLISHED;
1563
+
case ARCHIVED;
1564
+
}
1565
+
```
1566
+
1567
+
En un Enum, cada definición distingue entre mayúsculas y minúsculas. Históricamente, en PHP generalmente representamos "constantes" con mayúsculas para distinguirlas de las variables normales, por lo que tiene sentido apegarse a la notación en mayúsculas para los casos de enumeración. Tené en cuenta que esto funcionará y definirá 3 casos diferentes:
1568
+
1569
+
```php
1570
+
enum MyEnum
1571
+
{
1572
+
case FOO;
1573
+
case foo;
1574
+
case Foo;
1575
+
}
1576
+
```
1577
+
1578
+
Ahora podés comparar fácilmente las enumeraciones con el tipo de operador seguro `===`:
1579
+
1580
+
```php
1581
+
$statusA = Status::PENDING;
1582
+
if ($statusA === Status::PENDING) {
1583
+
// true
1584
+
}
1585
+
```
1586
+
1587
+
Además, una enumeración se comporta como un objeto PHP tradicional:
1588
+
1589
+
```php
1590
+
$statusA = Status::PENDING;
1591
+
$statusB = Status::PENDING;
1592
+
$statusC = Status::ARCHIVED;
1593
+
$statusA === $statusB; // true
1594
+
$statusA === $statusC; // false
1595
+
$statusC instanceof Status; // true
1596
+
```
1597
+
1598
+
Podés usar Enum para hacer cumplir los tipos:
1599
+
1600
+
```php
1601
+
function myFunction(Status $param)
1602
+
{
1603
+
return $param;
1604
+
}
1605
+
$a = myFunction(Status::DRAFT);
1606
+
// $a = Status::DRAFT
1607
+
$b = myFunction('foo'); // TypeError: myFunction(): Argument #1 ($param) must be of type Status, string given
1608
+
```
1609
+
1610
+
### Métodos en Enum
1611
+
1612
+
Podés definir métodos en un Enum:
1613
+
1614
+
```php
1615
+
enum Status
1616
+
{
1617
+
case DRAFT;
1618
+
case PUBLISHED;
1619
+
1620
+
public function label(): string
1621
+
{
1622
+
return match($this)
1623
+
{
1624
+
Status::DRAFT => 'Not ready...',
1625
+
Status::PUBLISHED => 'Published !',
1626
+
};
1627
+
}
1628
+
}
1629
+
```
1630
+
1631
+
Entonces podés usar los métodos en cualquier instancia de enum:
1632
+
1633
+
```php
1634
+
$a = Status::DRAFT;
1635
+
$a->label(); // 'Not ready...'
1636
+
```
1637
+
1638
+
### Valores de respaldo
1639
+
1640
+
A veces es necesario asignar un valor propio a cada caso (ej: para almacenarlo en una base de datos, comparación, etc). Tenés que definir el tipo del valor. Acá hay un ejemplo con un valor definido como un `int` :
1641
+
1642
+
```php
1643
+
enum HttpStatus: int
1644
+
{
1645
+
case OK = 200;
1646
+
case NOT_FOUND = 404;
1647
+
case INTERNAL_SERVER_ERROR = 500;
1648
+
}
1649
+
```
1650
+
1651
+
Y acá hay un ejemplo de un valor definido como `string`:
1652
+
1653
+
```php
1654
+
enum Status: string
1655
+
{
1656
+
case DRAFT = 'draft';
1657
+
case PUBLISHED = 'published';
1658
+
}
1659
+
```
1660
+
1661
+
#### Recursos externos
1662
+
1663
+
-[Manual de Enums en la documentación oficial de PHP](https://www.php.net/manual/es/language.enumerations.php)
1664
+
-[Enums en PHP.Watch](https://php.watch/versions/8.0/match-expression)
1665
+
-[Guía de estilo para Enums en stitcher's blog](https://stitcher.io/blog/php-enum-style-guide)
0 commit comments