PHP多功能返回类型String | int

时间:2019-05-10 13:25:58

标签: php return-type phpcodesniffer php-code-coverage

我遇到了一种不寻常的情况,我的函数返回了多个类型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
 */

3 个答案:

答案 0 :(得分:1)

“最佳”实践将表示最好具有一致的返回类型。如果没有严格的返回类型,则无法定义严格的返回类型。因此,您处于这种情况是设计使然。

最好看一下为什么您拥有这些不同的返回类型。然后您有一些选择。

  1. 我对逻辑尚不完全清楚,但是引发异常而不是返回0是否更有意义?

  2. 这不是一个很好的解决方案,但是如果第一个if返回null而不是0,则可以使用?string

    < / li>
  3. 具有两个功能有意义吗? getAlphaScoreAsInteger getAlphaScoreAsString。当然取决于您要尝试的操作

答案 1 :(得分:0)

然后您不声明返回类型。

它是stringint,您不能同时拥有两者。

这就是PHP弱键入的地方。

答案 2 :(得分:0)

我建议最佳实践是仅从方法或函数中返回一种类型,而不是混合类型。

假设分数是整数或整数(123或“ 123”)的字符串表示形式,然后确定您希望将其变为强制使用类型强制转换的类型。

当您返回“ U”时,我建议转换为字符串。您可以使用ctype_digit进行检查,以确保您的字符串在返回之前仅包含数字字符,如果没有则抛出异常。

或者返回null而不是'U'并使用?int注释。严格检查返回值将使您可以将null转换为“ U”。