Home > Backend Development > PHP Tutorial > Detailed explanation of anonymous functions and closures in php

Detailed explanation of anonymous functions and closures in php

怪我咯
Release: 2023-03-11 17:30:01
Original
1118 people have browsed it

1: Anonymous functions (can only be used in php5.3.0 or above)

Anonymous functions in php (Anonymous functions) , also called closure function (closures), 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(){

    ....

 };
Copy after login

eg: Assign the anonymous function to the variable, through the variable To call

 $closureFunc = function($str){

   echo $str;

  };  $closureFunc("hello world!");
Copy after login

Output: hello world!

2: Closure

2.1 Place the anonymous function in the ordinary function , you can also return the anonymous function, which constitutes a simple closure

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

2.2 In the anonymous function Reference local variable

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

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, a PHP keyword use must be quoted. The code is as follows

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

2.3 Return anonymous function

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

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
Copy after login

2.5 How to use closure to change the variable value 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
Copy after login

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
Copy after login

2.6 Pass anonymous functions as parameters

function callFunc($func){
    $func("argv");
}

callFunc(function($str){
    echo $str;
})
//输出:
// argv
Copy after login

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

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template