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!