我有一个PHP5对象将消息传递给另一个,并希望为每个消息附加一个类型.例如,MSG_HOT和MSG_WARM,和MSG_COLD.如果PHP5有一个枚举类型,我可能会用它来定义消息类型,但(除非我错了)没有这样的动物.我看了几个选项:
字符串('MSG_HOT','MSG_WARM'和'MSG_COLD')是不好的,因为我不可避免地会输入类似的东西'MSG_WRAM',事情会破裂.数字遇到同样的问题,也不太清楚.
定义工作:
define('MSG_HOT', 1);
define('MSG_WARM', 2);
define('MSG_COLD', 3);
Run Code Online (Sandbox Code Playgroud)
但污染全局命名空间,因此需要更详细的名称来确保唯一性.我宁愿不让我的代码乱丢东西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;
}
Run Code Online (Sandbox Code Playgroud)
我认为这很好,但对于看起来应该是一个简单的概念也是很多工作.
我错过了一个更好的选择吗?
我正在用C++编写一个Windows控制台应用程序,并希望在成功时返回零,并在失败时S_OK返回有意义的错误代码(即,应该返回0,并且E_OUTOFMEMORY应该返回不同的返回值E_FAIL,依此类推).以下是一个好的方法吗?:
int wmain(int argc, wchar_t *argv[])
{
HRESULT hr = DoSomething();
return (int) hr;
}
Run Code Online (Sandbox Code Playgroud)
或者,还有更好的方法?也许是我忘记或找不到的标准Win32 API函数或宏?