如何在 PHP 中更新函数中的引用参数

How to update reference argument in functions in PHP

提问人:Sutton 提问时间:9/22/2022 更新时间:9/23/2022 访问量:44

问:

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

目前,下面的代码将保留变量,而不是更新变量。我确信正在设置原因,因为我可以在它设置原因的地方断点(甚至在当前范围内输出原因)。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 函数,它使用与我试图实现的功能类似的功能(exec 函数中的输出参数)。另一个示例是 .NET 中的关键字。我猜因为PHP引用不太像你的典型参考,这行不通吗?out

PHP 函数 按引用传递

评论

0赞 Arthur Boucher 9/22/2022
我不明白,这似乎按预期工作。如果我实例化一个字符串变量并将其作为 的第二个参数传递,它的值确实在我调用函数的范围内更改为。function_a'Reason why it is invalid'
0赞 Sutton 9/23/2022
嗯,你似乎是对的,在沙盒中它可以工作,但在我本地则不行。我一定错过了什么愚蠢的东西。

答:

0赞 Sutton 9/23/2022 #1

虽然我没有在最初的问题中具体说明,但我使用的是 Laravel 外墙。出于某种原因,使用我想要的引用不适用于 Facade。也许是因为它如何覆盖这个特征。__callMacroable

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

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