我似乎无法找到任何这个,并想知道是否有可能存储一个函数或函数引用作为数组元素的值。对于例如功能作为数组值
array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc())
谢谢!
我似乎无法找到任何这个,并想知道是否有可能存储一个函数或函数引用作为数组元素的值。对于例如功能作为数组值
array("someFunc" => &x(), "anotherFunc" => $this->anotherFunc())
谢谢!
你可以在“参考”的任何功能。函数引用不是“内存中的地址”或某种意义上的引用。这仅仅是函数的名字。
<?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));
好的,谢谢!所以最终,我想我正在寻找一种方法来创建一个指针。我不想复制一个函数,但只需要一个指向它的指针,这样我就可以修改和读取指针所指向的值。 – user784446 2012-02-25 13:00:35
该死的,只是意识到,call_user_func是PHP的函数方法库的实际成员!谢谢! – user784446 2012-05-19 07:53:18
解析错误:语法错误,第7行出现意外的T_FUNCTION – 2013-06-08 07:48:24
PHP支持变量函数的概念,所以你可以做这样的事情:
function foo() { echo "bar"; }
$array = array('fun' => 'foo');
$array['fun']();
YOUT可以manual查看更多的例子。
谢谢,正在考虑将此作为解决方案。但文档也指出一个元素的值可以是任何类型,所以为什么不能使用函数呢?我可以使用“element”=> object(),但不知道可以用这个做什么。 – user784446 2012-02-25 12:09:32
查看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);
}
加数组可以保存任何数据类型,无论是函数调用,嵌套的数组,对象,字符串,整数等等,等等
我只想补充说,当你不希望你的方法过于复杂时,这是一个很好的方法来替换长开关语句。 – 2015-04-25 13:06:25
是的,你可以:
$array = array(
'func' => function($var) { return $var * 2; },
);
var_dump($array['func'](2));
这不,当然需要PHP anonymous function支持,这与PHP版本5.3.0到达。尽管如此,这会给你留下难以辨认的代码。
这不适合我,它返回意外的T_FUNCTION错误。 – user784446 2012-02-25 13:05:23
您使用的是什么版本的PHP?它在运行PHP 5.3.6的笔记本电脑上运行良好。如果你使用5.2,那么这肯定不会像我在上面的回答中提到的那样工作。 – Treffynnon 2012-02-25 13:06:40
啊,好的。这可能是为什么。我正在使用PHPDesigner2008,所以它的错误通知库可能已过时。 – user784446 2012-02-25 13:08:18
可能存在[可以在PHP数组中存储函数吗?](http://stackoverflow.com/questions/1499862/can-you-store-a-function-in-a-php-array) – nawfal 2015-11-11 11:29:42
'x()'不是函数或对函数的引用,而是函数调用;即该函数现在被执行,并且它返回的值被存储在你的数组中'someFunc'。阅读关于[功能](http://php.net/manual/en/language.functions.php)的PHP文档以获取更多信息(包括对您问题的回答)。 – axiac 2015-11-11 11:37:24