【问题标题】:PHP multiple function return types String|int [duplicate]PHP 多个函数返回类型 String|int [重复]
【发布时间】:2019-09-28 10:15:27
【问题描述】:

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

【问题讨论】:

  • 如果您使用大量数字,请将其保留为 int

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


【解决方案1】:

然后你不声明返回类型。

要么是string,要么是int,你不能同时拥有。

这就是 PHP 的弱类型发挥作用的地方。

【讨论】:

    【解决方案2】:

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

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

    1. 我对逻辑并不完全清楚,但是抛出异常而不是返回 0 是否更相关?

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

    3. 有两个函数有意义吗? getAlphaScoreAsIntegergetAlphaScoreAsString。当然,这取决于您要做什么

    【讨论】:

      【解决方案3】:

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

      假设分数是整数或整数的字符串表示形式( 123 或 "123" ),然后决定您希望它使用哪种类型强制转换。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        • 1970-01-01
        • 2013-01-03
        • 2015-01-06
        • 2017-08-04
        • 2014-01-07
        • 2016-06-08
        相关资源
        最近更新 更多