Skip to content

Commit f52acfb

Browse files
committed
init new enums section
1 parent b97d362 commit f52acfb

File tree

1 file changed

+116
-1
lines changed

1 file changed

+116
-1
lines changed

translations/es-AR.md

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1547,4 +1547,119 @@ Por supuesto, para aceptar tanto `string` como `Stringable`, puede usar un tipo
15471547
function myFunction(string|Stringable $param): string {
15481548
return (string) $param;
15491549
}
1550-
```
1550+
```
1551+
1552+
### Enums
1553+
1554+
![php-version-81](https://shields.io/badge/php->=8.1-blue)
1555+
1556+
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

Comments
 (0)