• 闭包函数
    • 闭包的概念
    • 匿名函数
      • use

    闭包函数

    闭包的概念

    闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
    在php中,闭包函数一般就是匿名函数.
    举例,有一个定时任务,每一秒执行一次,现在我们要开启一个服务,然后准备在30秒的时候关闭这个服务

    1. <?php
    2. function tick($callback){
    3. while (1) {//简单实现的定时器,每秒都去执行一次回调
    4. call_user_func($callback);
    5. sleep(1);
    6. }
    7. }
    8. class Server
    9. {
    10. //模拟退出一个服务
    11. public function exitServer()
    12. {
    13. return true;
    14. }
    15. }
    16. $server = new Server();
    17. $time = time();
    18. tick(function ()use($server) {
    19. $server->exitServer();
    20. });

    在这里面,使用匿名函数,use了函数外部的$server变量,才使得定时器能回调调用$server->exitServer();

    匿名函数

    匿名函数 通俗来讲,就是没有名字的函数,例如上面写的function(){},它通常作为闭包函数使用,使用方法如下:

    1. <?php
    2. $fun = function($name){
    3. printf("Hello %s\r\n",$name);
    4. };
    5. echo $fun('Tioncico');
    6. function a($callback){
    7. return $callback();
    8. }
    9. a(function (){
    10. echo "EasySwoole\n";
    11. return 1;
    12. });

    use

    PHP在默认情况下,匿名函数不能调用所在代码块的上下文变量,而需要通过使用use关键字。

    1. <?php
    2. function a($callback){
    3. return $callback();
    4. }
    5. $str1 = "hello,";
    6. $str2 = "Tioncico,";
    7. a(function ()use($str1,$str2){
    8. echo $str1,$str2,"EasySwoole\n";
    9. return 1;
    10. });