php - 替代 PHP5 中的枚举类型?

标签 php enums

我有一个 PHP5 对象将消息传递给另一个,并且想为每条消息附加一个类型。例如,MSG_HOTMSG_WARMMSG_COLD。如果 PHP5 有一个枚举类型,我可能会用它来定义消息类型,但是(除非我弄错了)没有这样的动物。我查看了几个选项:

字符串('MSG_HOT''MSG_WARM''MSG_COLD')是不好的,因为我不可避免地会输入类似 'MSG_WRAM' 然后事情就会崩溃。数字也有同样的问题,也不太清楚。

定义工作:

define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);

但会污染全局命名空间,因此需要更冗长的名称来确保唯一性。我不希望我的代码中充斥着诸如 APPLICATIONNAME_MESSAGES_TYPE_HOT 之类的东西。

最后,我可以使用类名来区分类型,如下所示:

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;
}

这很好,我认为,但对于看起来应该是一个简单概念的东西来说,也需要做很多工作。

我是否缺少更好的选择?

最佳答案

一个非常常见的约定是在 PHP 中使用类常量。

例如

class Message
{
    const HOT  = 0;
    const WARM = 1;
    const COLD = 2;
}

关于php - 替代 PHP5 中的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185482/

相关文章:

c - 使用枚举访问二维数组索引

.net - 如何将枚举值序列化为 int?

java - 你应该在 java 枚举中包含未知/默认值吗

PHP/mysql 在 OS X Mavericks 上需要 127.0.0.1

php - 2 PDO中的mysql查询?

javascript - 停用下拉菜单

mysql - 根据枚举值和按日期分组获取多列中的最高分数和名称

python - 将 H2o 中的分类特征(枚举)转换为 boolean 值

php - 无法在 MACOS Ventura 中安装 php intl 扩展

php - Laravel Eloquent 截断数据类型 double