我似乎无法找到任何此类内容,并且想知道是否可以将函数或函数引用存储为数组元素的值。对于例如
array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc())
谢谢!
答案 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版一起提供。这会给你留下相当难以理解的代码。