假设我有以下功能:
function mul()
{
return array_reduce(func_get_args(), '*');
}
可以使用*运算符作为回调函数吗?还有其他办法吗?
答案 0 :(得分:8)
在这种特定情况下,请使用array_product()
:
function mul() {
return array_product(func_get_args());
}
一般情况下?不,您不能将运算符作为回调函数传递给函数。你至少必须把它包装在一个函数中:
function mul() {
return array_reduce(func_get_args(), 'mult', 1);
}
function mult($a, $b) {
return $a * $b;
}
答案 1 :(得分:5)
您提供的代码不起作用,但您可以执行类似的操作。
function mul()
{
return array_reduce(func_get_args(), create_function('$a,$b', 'return "$a * $b'));
}
create_function允许你创建短函数(一个班轮),如果你的函数越来越长,那么一个语句最好创建一个真正的函数来完成这项工作。
请注意单引号很重要,因为您使用的是美元符号,因此您不希望PHP尝试替换它们。
答案 2 :(得分:1)
如果我定义你的功能然后这样做:
$arr = array(2,3,4,5,6); mul($arr);
我收到以下警告:
Warning: array_reduce(): The second argument, '*', should be a valid callback in /home/azanar/Documents/Projects/testbed/test.php on line 6
这里的另外两个答案很好地解决了这样做的工作方式。然而,这通常是一个好习惯,当你想知道某种语言是否允许某些东西时,只是试一试,看看会发生什么。您可能会对某些语言允许的内容感到惊讶,如果他们不这样做,他们几乎总会给您一些有意义的错误消息。
答案 3 :(得分:0)
PHP 5.3有闭包;)