PHP多函数返回类型字符串| int

PHP多函数返回类型字符串| int,php,return-type,phpcodesniffer,php-code-coverage,Php,Return Type,Phpcodesniffer,Php Code Coverage,我遇到了一个有点不寻常的场景,在这个场景中,我的函数返回多种类型的string或integer。我正在尝试声明返回类型。有谁能建议我在这里申报的最佳做法吗 我知道null或其他类型我可以使用这样的东西 /** * Get the result status as a formatted string * @return string|null formatted status */ public function abStatus() : ?string { 但我的函数如下所示,返回字符

我遇到了一个有点不寻常的场景,在这个场景中,我的函数返回多种类型的
string或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
}

此外,我还想了解在这种情况下的想法/建议/最佳实践,在这种情况下,将返回多种返回类型

/**
 * @param $compareAction
 * @return float|int|null
 */

那么,您不需要声明返回类型

它要么是
string
要么是
int
,不能两者都有

这就是PHP弱类型的原因所在。

“最佳”实践会说,最好使用一致的返回类型。没有严格返回类型时,无法定义严格返回类型。所以你处于这种情况是故意的

最好看看为什么你有这些不同的回报类型。那么你有一些选择

  • 我不完全清楚逻辑,但是抛出异常而不是返回
    0
    是否更相关

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

  • 有两个功能有意义吗
    getAlphaScoreAsInteger
    getAlphaScoreAsString
    。当然,这取决于你想做什么


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

    假设分数是整数或整数(123或“123”)的字符串表示形式,然后决定希望它成为使用类型转换来强制执行它的类型

    当你返回“U”时,我建议你使用弦。您可以使用ctype_digit添加一个检查,以确保您的字符串在返回之前只包含数字字符,如果不包含,则引发异常


    或者,返回null而不是“U”,并使用?int注释。对返回值的严格检查将允许您将null转换为“U”。

    如果要处理大量数字,请将其保留为int
     public function getAlphaScore() : int {
    
    /**
     * @param $compareAction
     * @return float|int|null
     */