什么是使函数返回非二进制状态的最优雅方式?

时间:2017-08-02 16:42:08

标签: php function return

在PHP中是否有一个普遍认可的解决方案来创建返回非二进制状态的函数?例如,如果一个函数将返回"成功"或者"失败",只是吐出一个布尔值很简单,但如果它需要返回故障而不是thing_1_happened与thing_2_happened会怎么样?

过去,我有函数返回整数或符合常量的字符串,例如

$result = $myClass->whatever();

if ($result === MyClass::Thing1Happened) {
    ...
} elseif ($result === MyClass::Thing2Happened) {
    ...
}

但它只是感觉不够优雅,而且最终只有大量常量才被单一功能使用。我认为它比返回魔法,未命名的值更好,这会导致拼写错误(如果你使用字符串)或可读性降低(如果你使用了int)但是有更好的方法吗?

如果有"非二元状态返回的正确术语"这将使这个谷歌能够,请赐教。

1 个答案:

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