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

回到顶部