- 匿名函数也叫闭包函数(closures),声明方式如下
<?php
$func = function() {
};
$func = function($param) {
echo $param;
};
$func('Hello world');
- 简单的闭包:匿名函数作为参数传入普通函数,也可以被返回。
<?php
function printStr(){
$func = function($str){
echo $str;
};
$func('Hello world!');
}
printStr();
function getFunc(){
$func = function($str){
echo $str;
};
return $func;
}
$printFunc = getFunc();
$printFunc('Hello world!!');
function callFunc($func) {
$func('Hello world!!!');
}
callFunc(function($str) {
echo $str;
});
<?php
function getFriends(){
$f1 = 'Jerry';
$f2 = 'Penny';
$func = function(){
echo 'Hello world!!!!' . PHP_EOL;
echo $f1 . PHP_EOL;
echo $f2 . PHP_EOL;
};
$func();
}
getFriends();
function getFriends(){
$f1 = 'Jerry';
$f2 = 'Penny';
$func = function() use ($f1){
echo 'Hello world!!!!' . PHP_EOL;
echo $f1 . PHP_EOL;
echo $f2 . PHP_EOL;
};
$func();
}
getFriends();
Hello world!!!!
Jerry
function getFriends(){
$f1 = 'Jerry';
$f2 = 'Penny';
$func = function() use ($f1, $f2){
echo 'Hello world!!!!' . PHP_EOL;
echo $f1 . PHP_EOL;
echo $f2 . PHP_EOL;
};
$func();
}
getFriends();
Hello world!!!!
Jerry
Penny
function getFriends(){
$f1 = 'Jerry';
$func = function() use ($f1){
$f1 = 'Stark';
echo $f1 . PHP_EOL;
$f1 = 'Luffy';
};
$func();
echo $f1;
}
getFriends();
Stark
Jerry
function getFriends(){
$f1 = 'Jerry';
$func = function() use (&$f1){
$f1 = 'Stark';
echo $f1 . PHP_EOL;
$f1 = 'Luffy';
};
$func();
echo $f1;
}
getFriends();
Stark
Luffy
function getFriends(){
$f1 = 'Jerry';
$func = function() use (&$f1){
echo $f1 . PHP_EOL;
$f1 = 'Luffy';
};
return $func;
}
$gf = getFriends();
$gf();
$gf();
Jerry
Luffy