我遇到了一种不寻常的情况,我的函数返回了多个类型string or integer
。我正在尝试声明返回类型。有人可以建议我在这里声明最佳做法。
我知道可以使用null或其他类型,例如
/**
* Get the result status as a formatted string
* @return string|null formatted status
*/
public function abStatus() : ?string {
但是我的函数就像下面的返回字符串或整数
/**
* Get the score for this action
* @return string|int
*/
public function getAlphaScore() {
if ($this->type != self::TYPE_ACTION) {
return 0;
}
if (empty($this->action->status < self::STATUS_IMPORTED) {
return 'U';
}
return ActionCalculator::actionScore($this->action->score);//returns integer here
}
现在,我想知道如何使用返回类型声明函数
public function getAlphaScore() : string {
或
public function getAlphaScore() : int {
我还想了解在这种情况下会返回多种返回类型的想法/建议/最佳做法
/**
* @param $compareAction
* @return float|int|null
*/
答案 0 :(得分:1)
“最佳”实践将表示最好具有一致的返回类型。如果没有严格的返回类型,则无法定义严格的返回类型。因此,您处于这种情况是设计使然。
最好看一下为什么您拥有这些不同的返回类型。然后您有一些选择。
我对逻辑尚不完全清楚,但是引发异常而不是返回0
是否更有意义?
这不是一个很好的解决方案,但是如果第一个if
返回null
而不是0
,则可以使用?string
具有两个功能有意义吗? getAlphaScoreAsInteger
getAlphaScoreAsString
。当然取决于您要尝试的操作
答案 1 :(得分:0)
然后您不声明返回类型。
它是string
或int
,您不能同时拥有两者。
这就是PHP弱键入的地方。
答案 2 :(得分:0)
我建议最佳实践是仅从方法或函数中返回一种类型,而不是混合类型。
假设分数是整数或整数(123或“ 123”)的字符串表示形式,然后确定您希望将其变为强制使用类型强制转换的类型。
当您返回“ U”时,我建议转换为字符串。您可以使用ctype_digit进行检查,以确保您的字符串在返回之前仅包含数字字符,如果没有则抛出异常。
或者返回null而不是'U'并使用?int注释。严格检查返回值将使您可以将null转换为“ U”。