我可以在PHP中使用运算符作为函数回调吗?

时间:2009-11-07 10:13:41

标签: php operators

假设我有以下功能:

function mul()
{
   return array_reduce(func_get_args(), '*');
}

可以使用*运算符作为回调函数吗?还有其他办法吗?

4 个答案:

答案 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有闭包;)