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
,如果不是数字则抛出异常。
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
,如果不是数字则抛出异常。