Un type énumération pour PHP

Un truc qui me manque énormément avec PHP : les énumérations. C'est tellement pratique en .NET.

J'ai mis au point une petite classe pour pallier ce manque :

<?php
namespace Wiip;

abstract class Enum
{
    protected $value;

    public function __construct($value)
    {
        $this->value = $value;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return (string)$this->value;
    }

    /**
     * @return array
     */
    public static function getConstList()
    {
        $rf = new \ReflectionClass(get_called_class());
        return $rf->getConstants();
    }
}

Pour créer votre énumération, il faut créer une classe dérivée avec des constantes pour chaque valeur. Par exemple :

<?php
namespace Wiip;

use Wiip\Enum;    

class DealStatus extends Enum
{
    const LOST = 'lost';

    const PENDING = 'pending';

    const WON = 'won';
}

On peut ensuite utiliser le type hinting pour imposer l'utilisation de l'énumération sur des méthodes :

public function setStatus(DealStatus $status)
{
    $this->status = $status;
}

Et on peut obtenir un tableau avec toutes les valeurs de l'énumération avec la méthode statique getConstList :

DealStatus::getConstList()

Etiquettes:

Add new comment