我在其他函数中使用了一个回调函数,我需要从这个封闭函数中访问一个变量,但不知道该怎么做。这是一个例子:
function outer($flag)
{
$values = array(1, 5, 3, 9);
usort($values, function($a, $b)
{
if ($flag)
{
// Sort values in some way
}
else
{
// Sort values in some other way
}
});
}
所以我将一些标志传递给外部函数,然后在排序回调函数中使用它来决定如何对值进行排序。是的,我知道我可以检查外部函数中的标志,然后调用不同的排序函数,但这不是问题。
问题是如何在回调中访问外部函数的变量(或参数)。而不是使用全局变量。如果真的没办法,“这是不可能的”答案也是可以接受的。
答案 0 :(得分:5)
有use
个关键字。它使函数的当前值可用。
function outer($flag)
{
$values = array(1, 5, 3, 9);
usort($values, function($a, $b) use ($flag)
{
if ($flag)
{
// Sort values in some way
}
else
{
// Sort values in some other way
}
});
}
答案 1 :(得分:3)
有两个三种方式:
global
,这不是您的选择$flag
我会选择选项2.因为,还会有性能提升:当进行10000次比较时,您的旗帜将被检查10000次。当使用两个单独的回调函数时,标志只会被检查一次(比较可能是排序算法中最常用的操作)。
答案 2 :(得分:0)
如果没有明确传递变量,这是不可能的。
你必须将$ flat传递给函数(),如函数($ a,$ b,$ flag)。