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类有用,不能想到任何其他设计模式,以使这些代码不那么脆弱,想到工厂,但这对于这样简单的功能似乎很多工作。
谢谢!
答案 0 :(得分:1)
您可以为字符串使用一些常量并使用开关而不是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
作为输入,如果它不是数字则抛出异常。
答案 1 :(得分:0)
如果您比较像UserCohort(4998) == UserCohort(4999)
这样的对象实例,它将不会像您期望的那样。因为这意味着您要比较object
而不是字符串结果。
如果要比较对象产生的字符串,则需要先将object
转换为字符串。或者你可以这样做
strval(UserCohort(4998)) == strval(UserCohort(4999));