php闭包函数-什么是闭包和匿名函数? (匿名函数是闭包吗)

2023-08-29 0 3,133 百度已收录

什么是闭包和匿名函数? (匿名函数是闭包吗)

文章正文

闭包是在创建时封装周围状态的函数。 虽然闭包所在的环境不再存在php闭包函数,但是闭包中封装的状态仍然存在。

匿名函数是没有名称的函数。 匿名函数可以参数化为变量,这些变量可以像任何其他 PHP 对象一样传递。 不过,匿名函数仍然是一个函数,所以它可以被调用,也可以传递参数。 匿名函数非常适合函数或技巧反弹。

注意:理论上,闭包和匿名函数是不同的概念。 然而,PHP 将它们视为同一概念。 因此,当我们谈论闭包时,我们指的是匿名函数,反之亦然。

PHP 闭包和匿名函数使用与普通函数相同的复合句,但闭包和匿名函数显然是伪装成函数的对象(Closure 类的实例)。

创造封闭

$闭包=函数($名称){

返回 printf("Hello%s", $name);

}echo $closure("jerry");//检查$closure变量是否是一个闭包 var_dump($closureinstanceofClosure);

上面的代码创建了一个闭包对象,然后将其形参分配给 $closure 变量。 闭包与普通的 PHP 函数非常相似,使用相同的复杂语句、接收参数、返回值。

说明:我们之所以仍然可以调用 $closure 变量,是因为这个变量的值是一个闭包php闭包函数,但是闭包对象实现了 __invoke() 魔术。 只要变量名后面有(),PHP就会找到并调用__invoke()方法。

使用闭包

我们通常使用 PHP 闭包作为函数和技巧的反弹。 许多PHP函数都会使用反弹函数,例如array_map()和preg_replace_callback()。 在下面的示例中,我们将使用 array_map() 来处理链表并将链表的每一项加 1:

$numbers=array_map(函数($number){

返回$数字++;

},[1,2,3]);

var_dump($数字);

附加状态

PHP 闭包不像真正的 javascrypt 闭包那样手动封装应用程序的状态。 我们必须自动调用闭包对象的bindTo()方法或使用use关键字将状态附加到PHP闭包。

使用 use 关键字

使用 use 关键字附加闭包状态变得越来越常见,所以让我们首先看看这些方法。 当使用 use 关键字将变量附加到闭包时,附加变量将记住附加时分配给它的值。

函数汽车($名称){

返回函数($statu)使用($name){

returnsprintf("汽车%sis%s", $name, $statu);

}//将汽车名称封装在闭包中 $car=Car("bmw");//调用汽车的动作 //输出 --> "bmwisrunning" echo $car("running");

注意:使用 use 关键字将多个参数传递到闭包中。 在这种情况下,请使用冒号分隔多个参数,例如 PHP 函数或技术的参数。

使用bindTo()方法附加闭包的状态

与其他 PHP 对象一样,每个 Closure 实例都可以使用 $this 关键字访问 Closure 的内部状态。 闭包对象的默认状态是无用的,但是有一个 __invoke() 魔术和 bindTo() 方法。

bindTo() 方法减少了一些有趣的闭包潜力。 我们可以使用这个方法将 Closure 对象的内部状态绑定到其他对象。

bindTo()方法的第二个参数非常重要,它的作用是指定绑定闭包的对象所属的PHP类。 为此,闭包可以访问闭包所绑定的对象的受保护和私有成员变量。

类测试闭包{

私有$名称=[];

私人$年龄;

私人$性;

公共函数 addPerson($name, $personCallback){

//将闭包对象绑定到当前实例 $this->name[$name]=$personCallback->bindTo($this,__CLASS__);

公共函数显示($名称){

foreach($this->nameas $key=>$callback){

如果($键==$名称){

//执行闭包对象并将闭包状态附加到类 $callback();

echo "名称:{$name}n";

echo "年龄:{$this->年龄}n";

echo "性别:{$this->性别}n";

$person=newTestClosure();

$person->addPerson("杰瑞", function(){

$这个->年龄=19;

$this->性别=“男人”;

});

$person->display("jerry");/**输出

姓名:杰瑞

年龄:19

性别: 男

*/

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php闭包函数-什么是闭包和匿名函数? (匿名函数是闭包吗) https://www.wkzy.net/game/171114.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务