Una vez hemos visto las diferentes maneras de declarar un enumerador de PHP, procedamos a introducirnos en aspectos un poco más avanzados.
Recordemos que un enumerador es una capa de abstracción por encima de un objeto, y por tanto (de una manera más acotada) puede contener métodos entidades propias de estos, como los métodos. Veamos un ejemplo:
enum HttpMethod
{
case Post;
case Get;
case Put;
case Patch;
case Options;
public function toLowerCase() : string
{
return strtolower($this->name);
}
}
El ejemplo que acabamos de ver, define un método que pretende devolver el nombre de cada elemento del enumerador en minúsculas. Su uso sería el siguiente:
HttpMethod::Post->toLowerCase(); //Devuelve "post" en lugar de "Post".
Y así con cada caso que necesitemos o se nos ocurre. También funciona en el caso de los enumeradores con valores personalizados:
enum HttpMethod : string
{
case Post = 'POST';
case Get = 'GET';
case Put = 'PUT';
case Patch = 'PATCH';
case Options = 'OPTIONS';
public function toLowerCase() : string
{
return strtolower($this->value);
}
}
(Mismo resultado que en el ejemplo anterior).
Puestos a jugar, también se pueden hacer cosas como esta, aunque carentes de sentido práctico:
enum HttpMethod : string
{
case Post = 'POST';
case Get = 'GET';
case Put = 'PUT';
case Patch = 'PATCH';
case Options = 'OPTIONS';
public static function randomAndUselessMethod() : object
{
return (object) [
"foo" => "bar"
];
}
}
echo HttpMethod::Post::randomAndUselessMethod()->foo; //Imprime "bar".
Y aquí acaba esta trilogía. La verdad es que, en mi opinión personal, esta es una de las mejores incorporaciones al lenguaje que se han llevado a cabo en muchos años.