作为数组值

时间:2012-02-25 11:57:04

标签: php arrays function function-pointers

我似乎无法找到任何此类内容,并且想知道是否可以将函数或函数引用存储为数组元素的值。对于例如

array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc())

谢谢!

4 个答案:

答案 0 :(得分:13)

您可以“引用”任何功能。函数引用不是“内存中的地址”或其他意义上的引用。它只是函数的名称。

<?php

$functions = array(
  'regular' => 'strlen',
  'class_function' => array('ClassName', 'functionName'),
  'object_method' => array($object, 'methodName'),
  'closure' => function($foo) {
    return $foo;
  },
);

// while this works
$functions['regular']();
// this doesn't
$functions['class_function']();

// to make this work across the board, you'll need either
call_user_func($functions['object_method'], $arg1, $arg2, $arg3);
// or
call_user_func_array($functions['object_method'], array($arg1, $arg2, $arg3));

答案 1 :(得分:5)

PHP支持变量函数的概念,因此您可以执行以下操作:

function foo() { echo "bar"; }
$array = array('fun' => 'foo');
$array['fun']();

Yout可以查看manual中的更多示例。

答案 2 :(得分:5)

查看PHP的call_user_func。考虑下面的例子。

考虑两个功能

function a($param)
{
    return $param;
}

function b($param)
{
    return $param;
}


$array = array('a' => 'first function param', 'b' => 'second function param');

现在如果要执行序列中的所有函数,可以使用循环执行。

foreach($array as $functionName => $param) {
    call_user_func($functioName, $param);
}

plus数组可以保存任何数据类型,无论是函数调用,嵌套数组,对象,字符串,整数等等。

答案 3 :(得分:4)

是的,你可以:

$array = array(
    'func' => function($var) { return $var * 2; },
);
var_dump($array['func'](2));

当然,这需要PHP anonymous function支持,它随PHP 5.3.0版一起提供。这会给你留下相当难以理解的代码。