创建将函数作为参数的PHP函数

时间:2011-03-25 15:46:21

标签: php function

我正在尝试创建一个PHP函数,它将另一个PHP函数作为输入。这是一个例子:

function getMean(function){
    $allUsers =  getAllUsers();
    $sum = 0;

    foreach ($allUsers  as $currentUser ){

        $sum =+ (function($currentUser['CONSUMER_ID'], 5, 8))/(8-5);

    }

}

7 个答案:

答案 0 :(得分:4)

也许这样的事情应该这样做。 PHP有一个名为callback的“类型”,它可以是一个闭包(从PHP 5.3开始),包含对象的函数或数组的名称以及要调用的方法。可以使用call_user_func()

调用这些回调
function getMean($callback){
    $allUsers =  getAllUsers();
    $sum = 0;

    foreach ($allUsers  as $currentUser ){
        $sum =+ (call_user_func($callback, $currentUser['CONSUMER_ID'], 5, 8))/(8-5);
    }

    return $sum;
}

答案 1 :(得分:2)

你需要PHP 5.3才能本机化。

function getMean($function){
    $allUsers =  getAllUsers();
    $sum = 0;

    foreach ($allUsers  as $currentUser ){

        $sum += ($function($currentUser['CONSUMER_ID'], 5, 8))/(8-5);
    }
    return $sum;
}

getMean(function($consumer_id, $five, $eight) {
    return $consumer_id;
});

我运行PHP 5.3-(低于5.3),您需要使用回调(documentation is here)以及call_user_func()call_user_func_array()函数。

答案 2 :(得分:0)

只要function($currentUser['CONSUMER_ID'], 5, 8)返回

,就可以这样做

答案 3 :(得分:0)

看起来PHP Eval功能正是您所寻找的。将getMean函数传递给一个字符串,然后将该行更改为$ sum = +(eval($ param).....)

安全性是个问题,因为任何功能都可以通过。

答案 4 :(得分:0)

将函数另存为变量。

$function = function($param1){ //code here }

并将其作为参数传递给您的其他函数。

function getMean($function)
{
  //code here
  $sum += $function($param);
}

[编辑]

PHP.net Manual - Variable Functions

答案 5 :(得分:0)

你正在寻找anonymous functions吗?

菲利克斯

答案 6 :(得分:0)

如果你想在php中动态创建一个函数< 5.3然后你坚持使用create_function。考虑到你如何使用这个函数,除了为array_maparray_walk或做简单计算或基本文本处理的事情创建简单函数之外,它真的很疯狂。

如果您正在做一些比这更复杂的事情,那么简单地将函数定义为正常情况会更容易,而不是像其他人所建议的那样将它与call_user_funccall_user_func_array一起使用。

请勿使用eval: - )