我有一个PHP5对象将消息传递给另一个,并且想要为每条消息附加一个类型。例如,MSG_HOT
,MSG_WARM
和MSG_COLD
。如果PHP5有一个枚举类型,我可能会使用它来定义消息类型,但是(除非我错了)没有这样的动物。我已经看了几个选择: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;
}
这是好事,我想,但也有很多的东西好像它的工作应该是一个简单的概念。
我错过了一个更好的选择?
你可以像这样使用它:`Message :: HOT`。我也相信`Message`应该被声明为`abstract`。 – philfreo 2009-12-26 02:55:31