PHP5中的php匿名函数

PHP5中的php匿名函数,php,anonymous-function,Php,Anonymous Function,我一直在使用这样的回调函数: private function make_f($arg1, $arg2) { $callback = function ($my_var) use ($arg1, $arg2) { return $my_var * $arg1 * arg2; }; return $callback; } public static $arguments = array(); privat

我一直在使用这样的回调函数:

private function make_f($arg1, $arg2)
{
    $callback =
        function ($my_var) use ($arg1, $arg2)
        {
            return $my_var  * $arg1 * arg2;
        };
    return $callback;
}
public static $arguments = array();

private function make_f($arg)
{
    $variable_name = uniqid();

    ThisClass::$arguments[$variable_name] = $arg; // Replace ThisClass with the name of the actual class

    $callback = create_function('$my_var', 'return $my_var * ThisClass::$arguments[\'' . $variable_name . '\'];');

    return $callback;
}

通过PHP5.3.0,但是我的主机提供商有PHP5.2.6,所以它不能工作。有什么方法可以修复这个问题吗?

这取决于$arg是什么。对于$arg的任何可能值,我只能得出如下结果:

private function make_f($arg1, $arg2)
{
    $callback =
        function ($my_var) use ($arg1, $arg2)
        {
            return $my_var  * $arg1 * arg2;
        };
    return $callback;
}
public static $arguments = array();

private function make_f($arg)
{
    $variable_name = uniqid();

    ThisClass::$arguments[$variable_name] = $arg; // Replace ThisClass with the name of the actual class

    $callback = create_function('$my_var', 'return $my_var * ThisClass::$arguments[\'' . $variable_name . '\'];');

    return $callback;
}

这实际上取决于$arg是什么。对于$arg的任何可能值,我只能得出如下结果:

private function make_f($arg1, $arg2)
{
    $callback =
        function ($my_var) use ($arg1, $arg2)
        {
            return $my_var  * $arg1 * arg2;
        };
    return $callback;
}
public static $arguments = array();

private function make_f($arg)
{
    $variable_name = uniqid();

    ThisClass::$arguments[$variable_name] = $arg; // Replace ThisClass with the name of the actual class

    $callback = create_function('$my_var', 'return $my_var * ThisClass::$arguments[\'' . $variable_name . '\'];');

    return $callback;
}

我不知道$my_var来自何处。这很大程度上取决于$arg是什么。@Dan Lee:$my_var将在将来调用闭包时作为参数传递。PHP 5.0非常古老,它是在2005年发布的。你可能应该考虑一个更好的主机提供商。@ Dukkufff我的错误,它是5.2.6i不知道MyiVar来自何处。这很大程度上取决于$ARG是什么。@ Dan Lee:MyIVAR将在未来被调用时作为参数传递。PHP 5是非常古老的,它是在2005发布的。你应该考虑一个更好的主机提供商。@ Dukkvf我的错误,它是5.2。6@webbiedave:怎么会这样?我很确定uniqid不仅仅依赖于时钟。或者你是说别的什么?我在重读后删除了我的评论:这个解决方案有效,而且几乎是实现<5.3的唯一方法@Yekver:请记住,每次调用make_f时,create_函数都会在内存中添加一个新函数,它不会重用。所以,如果你在一个循环中调用100次,内存就会被消耗掉。除此之外,这完美地回答了OP的问题1@webbiedave:怎么会这样?我很确定uniqid不仅仅依赖于时钟。或者你是说别的什么?我在重读后删除了我的评论:这个解决方案有效,而且几乎是实现<5.3的唯一方法@Yekver:请记住,每次调用make_f时,create_函数都会在内存中添加一个新函数,它不会重用。所以,如果你在一个循环中调用100次,内存就会被消耗掉。除此之外,这完美地回答了OP的问题1.