无意中发现PHP已经走出了5.5版,他一直在用php5.2,使我看起来像一个年轻人走出大山,与土壤的落后。在我使用Javascript中使用闭包,我突然变成了PHP的封闭感兴趣。

因此,WAMP集成开发环境上了互联网。这是PHP5.3版本(PHP5.3介绍关闭功能)。It has to be said that WAMP installation is really convenient.Simply configure it and start doing it.


匿名函数
提到闭包,您必须考虑匿名函数,也称为闭包,它看起来像PHP闭包,主要是由它来声明的:
复制代码代码如下所示:
函数(){

};磁带结束

如您所见,匿名函数没有名称,如果您想使用它,您需要将其返回到一个变量:
复制代码代码如下所示:
$函数=函数(美元的){
echo参数;
};

$(字符串)功能;

输出:
某些字符串

顺便说一下,PHP还具有在引入闭包之前创建匿名函数的功能。创建函数,但是代码逻辑只能写成字符串,所以它看起来很模糊,维护也很差,所以很少有人使用它。


实施关闭
匿名函数在普通函数中作为参数传递,也可以返回。

下面有三个例子
复制代码代码如下所示:

在函数中定义一个匿名函数,并调用它
功能printstr(){
函数($){
回声$;
};
$(字符串)功能;
}

PrintStr();



两个案例
函数中返回匿名函数,并调用它。
功能getprintstrfunc(){
函数($){
回声$;
};
返回$函数;
}

printstrfunc美元= getprintstrfunc();
printstrfunc美元(字符串);




三例
匿名函数作为参数传递,并调用它
功能callfunc($函数){
$(字符串)功能;
}

printstrfunc美元=功能($str){
回声$;
};
CallFunc(printstrfunc美元);

也可以直接向匿名函数传输。如果你知道JS,这种写作方式可能很熟悉。
CallFunc(功能($str){)
回声$;
});

连接闭包和外部变量的关键字:使用
关闭可以节省一些在默认情况下,代码block.php上下文的变量和值,匿名函数不能调用的代码块的上下文变量,但它需要通过使用关键字使用。

另一个例子:
复制代码代码如下所示:
函数可以(){
美元= 1;
美元= 6;
函数()使用($人民币){
回音人民币;
回音美元;
};
函数();
}

GetMoney();

输出:
1
/ /错误,找不到dorllar变量

正如您所看到的,美元在使用关键字中没有声明,并且不能在这个匿名函数中得到它,所以我们应该注意这个问题在开发中。


人们可能会考虑在匿名函数中更改上下文变量的可能性,但我发现这是不可能的。
复制代码代码如下所示:
函数可以(){
美元= 1;
函数()使用($人民币){
回音人民币;
$加1的值
元+ +;
};
函数();
回音人民币;
}

GetMoney();

输出:
1
1

事实上,使用引号只是变量的拷贝,但是我想完整地引用变量,而不是复制品。

为了实现这个效果,实际上可以在变量之前添加一个符号。
复制代码代码如下所示:
函数可以(){
美元= 1;
函数()使用($人民币){
回音人民币;
$加1的值
元+ +;
};
函数();
回音人民币;
}

GetMoney();

输出:
1
2

因此,匿名函数可以引用上下文的变量,如果匿名函数返回到外部世界,匿名函数将节省使用引用的变量,而外部世界不能获得这些变量,所以闭包的概念可以更明确。

根据描述更改上述示例:
复制代码代码如下所示:
功能getmoneyfunc(){
美元= 1;
函数()使用($人民币){
回音人民币;
$加1的值
元+ +;
};
返回$函数;
}

可以getmoneyfunc美元=();
$可以();
$可以();
$可以();

输出:
1
2
3

总结
PHP闭包的特性并不令人惊讶。事实上,类可以实现类似的甚至更强大的功能,而无法与JS的关闭相比较。它只能期待改进后关闭支持PHP。然而,匿名函数是有用的,如preg_replace_callback等功能,如使用一个函数,不能在回调函数声明。