Home  >  Article  >  Backend Development  >  Detailed explanation of anonymous functions and closure examples in php

Detailed explanation of anonymous functions and closure examples in php

陈政宽~
陈政宽~Original
2017-06-28 11:23:391002browse

1: Anonymous function

The anonymous function in php, also called the closure function, allows you to specify a function without a name. The most commonly used one is the parameter value of the callback function.

Definition of anonymous function:

$closureFunc = function(){    .... };
   eg: 把匿名函数赋值给变量,通过变量来调用
$closureFunc = function($str){   echo $str;  };  $closureFunc("hello world!");
  输出: hello world!

2: Closure

2.1 Put the anonymous function in a normal function, or you can return the anonymous function, which constitutes a Simple closure

function closureFunc1(){    $func = function(){        echo "hello";
    };    $func();
}
closureFunc1();//输出: hello


2.2 Referring to local variables in anonymous functions

function closureFunc2(){    $num = 1;    $func = function(){        echo $num;
    };    $func();
}
closureFunc2();//Notice: Undefined variable: num


After the above function is run, A Notice error will be reported, indicating that we cannot use local variables in anonymous functions. At this time, we need to quote a PHP keyword use. The code is as follows

function closureFunc2(){    $num = 1;    $func = function() use($num){        echo $num;
    };    $func();
}
closureFunc2();//输出: 1


2.3 Return to anonymous Function

function closureFunc3(){    $num = 1;    $func = function() use($num){        echo $num;
    };    return $func;
}$func = closureFunc3(); //函数返回匿名函数$func(); //然后我们在用$func() 调用//输出: 1


2.4 How do we pass parameters to the anonymous function when we return it? In fact, it is the same as passing parameters to a normal function

function closureFunc4(){    $num = 1;    $func = function($str) use($num){        echo $num;        echo "\n";        echo $str;
    };    return $func;
}$func = closureFunc4();$func("hello, closure4");//输出:
//1
//hello, closure4


2.5 How to use closures to change the variable values ​​​​referenced by the context?

function closureFunc5(){    $num = 1;    $func = function() use($num) {        echo "\n";        $num++;        echo $num;
    };    echo "\n";    echo $num;    return $func;
}$func = closureFunc5();$func();$func();$func();//输出:
// 1
// 2
// 2
// 2


Looking at the above input results, it is obvious that the purpose has not been achieved. In fact, just add an & reference symbol.

function closureFunc5(){    $num = 2;    $func = function() use(&$num) {        echo "\n";        $num++;        echo $num;
    };    echo "\n";    echo $num;    return $func;
}$func = closureFunc5();$func();$func();$func();//输出:
// 2
// 3
// 4
// 5


2.6 Pass anonymous functions as parameters

function callFunc($func){    $func("argv");
}
callFunc(function($str){    echo $str;
})//输出:
// argv


The above is the detailed content of Detailed explanation of anonymous functions and closure examples in php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn