是否可以在 PHP 返回语句中执行赋值


Is it possible to perform an assignment in a PHP return statement?

我有一个关于PHP的返回语句的快速问题。在C++中,我们能够执行以下操作:

... function body ...
return (foo = bar, biz());

其中,在返回biz()结果之前将变量bar分配给foo

这在 PHP 中可能(或类似的东西)吗?PHP 中的上述语句会导致解析错误。现在,我知道我可以简单地在 return 语句之前执行赋值,但这只是一个人为的例子,我对可行性很好奇。

编辑:提供更多说明。这是我在PHP中基本上尝试做的事情:

return ($foo = $bar, biz())
    || ($foo = $bar, baz())
    || ($foo = $bar, qux());

foo是全局引用,biz在其中进行修改。如果biz返回 false,则测试 OR 语句中的下一段。由于返回biz false,所以我需要在执行baz之前"重置"foo的值,依此类推。

我知道我在这里试图做的事情是不纯的,但我只是好奇在 PHP 中是否有等效(或至少类似的东西)是可能的。

不,不幸的是,PHP 实际上没有逗号运算符,除了在 for 循环的 expr1 中。在其他任何地方,逗号仅用于将参数分隔到函数或语言结构。

您可以对自己的逗号运算符用户函数进行排序,该函数仅返回传递给其中的最后一个参数。这是我的镜头:

function comma(){ return func_get_arg(func_num_args() - 1); }

有了这个,您可以使用:

return comma($foo = $bar, biz());

以下完整的代码输出Hello

<?php
function foo(){
  $bar = 'Hello';
  return comma($foo = $bar, bar($foo));
}
function bar($foo){
    echo $foo;
}
foo();
function comma(){ return func_get_arg(func_num_args() - 1); }

编辑

使用逗号函数的示例代码如下所示:

return comma($foo = $bar, biz())
    || comma($foo = $bar, baz())
    || comma($foo = $bar, qux());

老实说,我不建议使用它。这就是为什么我的简短回答是"不"。

您可以在数组中返回它们

return Array($foo = "bar", biz());

该数组将包含:

Array ( [0] => bar [1] => A )