3

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

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

在返回结果之前bar分配变量的位置。foobiz()

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

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

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

foobiz修改的全局参考。如果biz返回 false,则测试 OR 语句中的下一段。因为biz返回false,所以我需要foo在执行之前“重置” 的值baz等等。

我知道我在这里尝试做的事情是不纯的,但我只是好奇在 PHP 中是否可以实现等价(或至少类似的事情)。

4

2 回答 2

3

不,不幸的是 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());

我真的不推荐使用这个。这就是为什么我的简短回答是“不”。

于 2012-06-11T00:00:36.313 回答
0

你可以在一个数组中返回它们

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

该数组将包含:

Array ( [0] => bar [1] => A )
于 2012-06-11T00:07:51.733 回答