ZendFramework:如何使这个 php 代码不那么脆弱?

ZendFramework: How to make this php code less brittle?

Zend Framework 2 新手实习生,一直在努力使这段代码更具适应性:

class UserCohort {
    private $toString;

    function __construct($count)
    {
        $this->count = $count;
        if ($count < 5000) {
            $this->toString = "less_than_5k";
        } else  if ($count < 25000) {
            $this->toString = "5k_to_25k";
        } else if  ($count < 100000) {
            $this->toString = "25k_to_100k";
        } else {
            $this->toString = "greater_than_100k";
        }
    }

    public function __toString()
    {
        return $this->toString;
    }
}

试图通过范围支持获得类似枚举的功能,即 UserCohort(4998) == UserCohort(4999) 等,具体取决于您的编程方式。我知道如何在 Java 中执行此操作,但有没有比我上面的 php 解决方案更好的方法?

没有真正发现 SPLENUM class 有帮助,想不出任何其他设计模式来使这段代码不那么脆弱,考虑过工厂,但是对于这么简单的东西来说似乎需要做很多工作功能。

谢谢!

如果您像这样比较对象实例 UserCohort(4998) == UserCohort(4999) 它不会像您预期的那样。因为这意味着您比较 object 而不是字符串结果。 如果要比较对象生成的字符串,需要先将 object 转换为字符串。或者你可以这样做

strval(UserCohort(4998)) == strval(UserCohort(4999));

您可以为字符串使用一些常量,并使用 switch 代替 if else 子句:

class UserCohort {
    const LESS_THEN_5K = "less_than_5k";
    const RANGE_5K_TO_25K = "5k_to_25k";
    const RANGE_25K_TO_100K = "25k_to_100k";
    const GREATER_THEN_100K = "greater_than_100k";

    private $string;

    private $count;

    function __construct($count)
    {
        $this->count = $count;
        switch(true){
            case $count < 5000:
                $this->string = self::LESS_THEN_5K;
                break;
            case $count < 25000:
                $this->string = self::RANGE_5K_TO_25K;
                break;
            case $count < 100000:
                $this->string = self::RANGE_25K_TO_100K;
                break;
            default:
                $this->string = self::GREATER_THEN_100K;
        }
    }

    public function __toString()
    {
        return $this->string;
    }
}

但我想这更多的是关于美学,而不是一个合适的选择。 也许您还应该考虑检查作为输入收到的变量类型 $count,如果不是数字则抛出异常。