PHP 关闭
示例
闭包是一个匿名函数,无法访问外部作用域。
当这样定义一个匿名函数时,您正在为该函数创建一个“命名空间”。当前,它只能访问该名称空间。
$externalVariable = "Hello";$secondExternalVariable = "Foo";
$myFunction = function() {
var_dump($externalVariable, $secondExternalVariable); // 返回两个错误通知,因为未定义变量
}
它无权访问任何外部变量。要授予此名称空间访问外部变量的权限,您需要通过闭包(use())引入它。
$myFunction = function() use($externalVariable, $secondExternalVariable) {var_dump($externalVariable, $secondExternalVariable); // 你好富
}
这在很大程度上归因于PHP严格的变量作用域-如果未在范围内定义变量,或者未将其引入,global则该变量不存在。
另请注意:
从父作用域继承变量与使用全局变量不同。全局变量存在于全局范围内,无论执行什么功能,该变量都是相同的。
闭包的父作用域是在其中声明闭包的函数(不一定是从其调用的函数)。
取自PHP文档中的匿名函数
在PHP中,闭包使用早期绑定方法。这意味着使用use关键字传递给闭包的名称空间的变量在定义闭包时将具有相同的值。
要更改此行为,您应该传递变量by-reference。
$rate = .05;// 将变量导出到闭包的范围
$calculateTax = function ($value) use ($rate) {
return $value * $rate;
};
$rate = .1;
print $calculateTax(100); // 5
$rate = .05;// 将变量导出到闭包的范围
$calculateTax = function ($value) use (&$rate) { // notice the & before $rate
return $value * $rate;
};
$rate = .1;
print $calculateTax(100); // 10
定义带/不带闭包的匿名函数时,默认参数不是隐式必需的。
$message = 'Im yelling at you';$yell = function() use($message) {
echo strtoupper($message);
};
$yell(); // 返回:IM骂你
以上是 PHP 关闭 的全部内容, 来源链接: utcz.com/z/321281.html