Enumeradores en PHP Parte III: Métodos personalizados > Blog | Josep Salvà - Desarrollo Web

La palabra de Wifft

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.