PHP –匿名函数和闭包(第二部分)

假设应用程序应将百分比列表减少到等于或大于用户指定值的百分比。为此,我们可以使用array_filter()

array_filter()函数接受输入数组和函数名称,并通过将回调函数应用于输入数组的每个元素而产生一个新的数组。如果回调返回true,则测试的元素将包含在最终输出数组中。但是,我们有一个小问题-的文档array_filter()显示它仅将一个值传递给回调(要检查的当前数组元素)。我们还需要访问用户指定的值。闭包将使我们能够“超出”percentFilter_callback()函数范围,以查看$userPercent的值。

$userPercent = 0.5;
$userList = array_filter($percentVowels, function($percent) use ($userPercent)
{
return ($percent >= $userPercent);
});

闭包允许您控制对函数父范围的值的访问。新语法引入了use关键字,用于指定应导入的变量。匿名函数由$传递了$percentVowels数组的当前元素array_filter(),但它也可以访问比较所需的$userPercent值。

PHP中的闭包从父作用域中导入变量,就像将变量作为参数传递给函数一样,并且操作变量不会在函数外部产生影响(除非它是通过引用传递的)。

但是,请务必记住,闭包与使用全局不是同一回事。脚本全局范围内的全局引用变量。另一方面,闭包只能绑定到函数的父作用域中的变量,这使得使用它们比使用全局方法安全得多。我将为您提供最后一个示例,以突出说明它们之间的区别:

$x = 42;
function foo() {
function fizz() {
global $x;
        echo $x;
}
bar();
}

function bar() {
$bizz = function () use ($x) { echo $x; };
$bizz();