php的闭包-PHP 中的闭包和匿名函数

2023-09-02 0 6,070 百度已收录

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

匿名函数是没有名称的函数。 匿名函数可以作为形式参数传递给变量,并且可以像任何其他 PHP 对象一样传递。 但是,匿名函数仍然是函数,因此可以调用它们并且可以传入参数。匿名函数非常适合作为函数或技术的后备。

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

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

//创建闭包

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

returnsprintf("Hello%s",$name);

回声 $closure("杰瑞");

//检查$closure变量是否是一个闭包

var_dump($closureinstanceofClosure);

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

php的闭包-PHP 中的闭包和匿名函数

说明:我们之所以仍然可以调用 $closure 变量,是因为这个变量的值是一个闭包,但是闭包对象实现了 __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=汽车(“宝马”);

//调用小车的动作

//输出-->“bmwisrunning”

回声$汽车(“运行”);

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

php的闭包-PHP 中的闭包和匿名函数

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

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

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

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

类测试闭包

私有$名称=[];

私人$年龄;

私人$性;

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

php的闭包-PHP 中的闭包和匿名函数

// 将闭包对象绑定到当前实例

$this->name[$name]=$personCallback->bindTo($this,__CLASS__);

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

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

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

// 执行闭包对象并将闭包状态附加到类

$callback();

回显“名称:{$名称}n”;

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

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

$person=newTestClosure();

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

$这个->年龄=19;

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

});

$person->display("杰瑞");

/**输出

姓名:杰瑞

年龄:19

性别:男

*/

收藏 (0) 打赏

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

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

悟空资源网 php php的闭包-PHP 中的闭包和匿名函数 https://www.wkzy.net/game/190332.html

常见问题

相关文章

官方客服团队

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