PHP:直接使用匿名函数的结果作为字符串?

时间:2013-02-26 18:08:08

标签: php lambda closures

是否可以做这样的事情。假设我们有一个接受字符串作为参数的函数。但是要提供这个字符串,我们必须对数据进行一些处理。所以我决定使用闭包,就像在JS中一样:

function i_accept_str($str) {
   // do something with str
}

$someOutsideScopeVar = array(1,2,3);
i_accept_str((function() {
    // do stuff with the $someOutsideScopeVar
    $result = implode(',', $someOutsideScopeVar); // this is silly example
    return $result;
})());

这个想法是在调用i_accept_str()时能够直接提供字符串结果......我可能可以用call_user_func来做,这已知是无效但有其他选择吗?

接受PHP 5.3和PHP 5.4解决方案(以上所需的行为已经过测试,但在PHP 5.3上不起作用,但可能适用于PHP 5.4)。

1 个答案:

答案 0 :(得分:2)

在PHP(> = 5.3.0,使用5.4.6测试)中,您必须使用call_user_func并使用use从外部范围导入变量。

<?php

function i_accept_str($str) {
   // do something with str
   echo $str;
}

$someOutsideScopeVar = array(1,2,3);
i_accept_str(call_user_func(function() use ($someOutsideScopeVar) {
    // do stuff with the $someOutsideScopeVar
    $result = implode(',', $someOutsideScopeVar); // this is silly example
    return $result;
}));