在PHP中是否有一个普遍认可的解决方案来创建返回非二进制状态的函数?例如,如果一个函数将返回"成功"或者"失败",只是吐出一个布尔值很简单,但如果它需要返回故障而不是thing_1_happened与thing_2_happened会怎么样?
过去,我有函数返回整数或符合常量的字符串,例如
$result = $myClass->whatever();
if ($result === MyClass::Thing1Happened) {
...
} elseif ($result === MyClass::Thing2Happened) {
...
}
但它只是感觉不够优雅,而且最终只有大量常量才被单一功能使用。我认为它比返回魔法,未命名的值更好,这会导致拼写错误(如果你使用字符串)或可读性降低(如果你使用了int)但是有更好的方法吗?
如果有"非二元状态返回的正确术语"这将使这个谷歌能够,请赐教。
答案 0 :(得分:1)
我建议创建一个新的值对象类来表示状态。该类可能只需要一个成员变量state
,并且可以使用常量定义可能的状态值。拥有这样的对象允许您针对您的状态编写更复杂的逻辑。这也使状态表示逻辑保持在一个类中,非常适合测试,防止缺陷等。
class EventStateValueObject
{
/**
* Side note: this has to be declared as protected; if declared as public, the magic getters and setters are bypassed
* @var int
*/
protected $state;
/**
* @param string $name
* @param mixed $value
* @return void
*/
public function __set($name, $value)
{
throw new RuntimeException('Value objects are immutable');
}
/**
* @param string $name
* @return mixed
*/
public function __get($name)
{
return $this->$name;
}
/**
* @param int $state
*/
public function __construct(int $state)
{
$this->state = $state;
}
}