我有一个关于PHP的return语句的快速问题。在C ++中,我们能够执行以下操作:
... function body ...
return (foo = bar, biz());
在返回bar
的结果之前,变量foo
已分配给biz()
。
PHP中是否可能(或类似)? PHP中的上述语句导致解析错误。现在,我知道我可以在返回语句之前简单地执行赋值,但这只是一个人为的例子,我对可行性很好奇。
修改:提供更多说明。以下是我基本上尝试用PHP做的事情:
return ($foo = $bar, biz())
|| ($foo = $bar, baz())
|| ($foo = $bar, qux());
foo
是biz
修改的全局参考。如果biz
返回false,则测试OR语句中的下一个段。由于biz
返回false,我需要在执行foo
之前“重置”baz
的值,依此类推。
我知道我在这里尝试做的事情是不纯的,但我只是好奇,在PHP中可能是等同的(或者至少是类似的事情)。
答案 0 :(得分:3)
不,不幸的是,除了for循环的expr1之外,PHP实际上没有逗号运算符。在其他任何地方,逗号只用于将参数与函数或语言结构分开。
您可以对自己的逗号运算符用户函数进行排序,该函数只返回传递给它的最后一个参数。这是我的镜头:
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());
我老实说不能推荐使用它。这就是为什么我的简短回答是“不”。
答案 1 :(得分:0)
你可以在数组中返回它们
return Array($foo = "bar", biz());
数组将包含:
Array ( [0] => bar [1] => A )