【问题标题】:How to update reference argument in functions in PHP如何更新 PHP 函数中的引用参数
【发布时间】:2022-09-23 01:40:03
【问题描述】:

如果我有两个函数,它们的参数都包含对字符串的引用。一个函数将调用另一个函数,但两个函数都可以设置引用变量的值。

目前,下面的代码会将变量保留为NULL,而不是更新变量。我确定正在设置原因,因为我可以在设置原因的位置断点(甚至在当前范围内输出原因)。

function function_a(string $path, ?string &$reason = null): ?string {
    // Set to false for example purposes
    $checkIsValid = false;
    if(!$checkIsValid) {
        $reason = \'Reason why it is invalid\';

        return null;
    }

    return function_b($path, $reason);
}

function function_b(string $path, ?string &$reason = null): ?string {
    $anotherValidCheck = false;
    if($anotherValidCheck) {
        $reason = \'Another reason why it is invalid\';

        return null;
    }

    return \'Some value\';
}

还有一个核心 PHP 函数,它使用与我试图实现的功能相似的功能 (output argument in the exec function)。另一个例子是 .NET 中的 out 关键字。我猜测,因为 PHP 引用与您的典型引用不太一样,所以这不起作用?

  • 我不明白,这似乎按预期工作。如果我实例化一个字符串变量并将其作为function_a 的第二个参数传递,它的值在我调用该函数的范围内确实更改为\'Reason why it is invalid\'
  • 嗯,您似乎是对的,在沙箱中它可以工作,但在我的本地却没有。我一定错过了一些愚蠢的事情。

标签: php function pass-by-reference


【解决方案1】:

虽然我没有在原始问题中指定,但我使用的是 Laravel 外观。出于某种原因,使用我想要的引用方式不适用于 Facade。也许是因为它是如何用 Macroable 特征覆盖 __call 的。

使用 DI 来使用存储库类而不是外观为我解决了这个问题。

无论如何,希望这可以帮助遇到此问题的其他任何人。

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2016-03-12
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多