J'ai un objet PHP5 qui transmet des messages à un autre, et j'aimerais attacher un type à chaque message. Par exemple, MSG_HOT
, MSG_WARM
et MSG_COLD
. Si PHP5 avait un type enum, je l'utiliserais probablement pour définir les types de message, mais (à moins que je ne me trompe) il n'y a pas un tel animal. Je l'ai regardé quelques options:Alternative aux types enum dans PHP5?
Cordes ('MSG_HOT'
, 'MSG_WARM'
et 'MSG_COLD'
) sont mauvais parce que je taperais inévitablement quelque chose comme 'MSG_WRAM'
et les choses se briser. Les numéros souffrent du même problème et sont également moins clairs.
définit le travail:
define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);
mais pollue l'espace de noms global, et aurait donc besoin de noms plus verbeux pour garantir l'unicité. Je préférerais ne pas avoir mon code jonché de choses comme APPLICATIONNAME_MESSAGES_TYPE_HOT
.
Enfin, je pourrais utiliser les noms de classe pour distinguer les types, comme ceci:
class MessageHot extends Message {}
class MessageWarm extends Message {}
class MessageCold extends Message {}
class Message
{
public function Type()
{
return get_class($this);
}
public function Data()
{
return $this->data;
}
public function __construct($data)
{
$this->data = $data;
}
private $data;
}
Ce qui est bon, je pense, mais aussi beaucoup de travail pour ce qui semble, il devrait être un concept simple .
Est-ce qu'il me manque une meilleure alternative?
Vous utiliseriez ceci comme suit: 'Message :: HOT'. Je crois aussi que 'Message' devrait être déclaré comme' abstract'. – philfreo
À moins bien sûr, la classe Message est utilisée pour plus de choses que simplement garder des constantes, comme 'Message :: Send (" bla bla ", Message :: HOT);' –