PHP基础知识之————匿名函数(Anonymous functions)

时间:2022-10-11 22:54:23

PHP基础知识之————匿名函数(Anonymous functions)

  匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。

创建闭包

Example #1 匿名函数变量赋值示例(http://laravelacademy.org/post/4341.html)

<?php
$fun = function($name){
printf("Hello %s\r\n",$name);
};
echo $fun('Tinywan');
echo $fun('Github');

打印结果:

Tinywan
Github

闭包和普通的PHP函数很像:常用的句法相同,也接受参数,而且能返回值。不过闭包没有函数名。

注:我们之所以能调用$greet变量,是因为这个变量的值是一个闭包,而且闭包对象实现了__invoke()魔术方法,只要变量名后有(),PHP就会查找并调用__invoke方法。

  我们通常把PHP闭包当做函数会方法的回调使用,事实上,很多PHP函数都会用到闭包,比如array_map和preg_replace_callback,这是使用PHP匿名函数的绝佳时机。记住,闭包和其他值一样,可以作为参数传入其他PHP函数:

$numberPlusOne = array_map(function ($number) {
return $number +=1;
}, [1, 2, 3]);
print_r($numberPlusOne);
function demo1(){
function a(){
echo 'a Function'."\r\n";
}
function b(){
echo 'b Function';
}
}
//a() 这样是不可以的,直接报错
demo1(); //demo()1调用了,a()函数就可以调用了,
a();

在函数内部定义一个匿名函数,同时使用匿名函数,(这可不是闭包哦!!)

PHP基础知识之————匿名函数(Anonymous functions)

function funDemo(){
$demo = function($str){
echo $str;
};
//调用匿名函数,在这里调用是OK的!
$demo('Tinywan');
}
funDemo(); //OK!
$demo('Github'); //尝试调用匿名函数,发生错误!

错误信息:

Fatal error: Uncaught Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32
Error: Function name must be a string in E:\wamp64\www\php-net\function\Example#2.php on line 32

PHP基础知识之————匿名函数(Anonymous functions)

function funDemo(){
$str1 = 100; //外部函数变量
$str2 = 200;
//闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。
$demo = function() use ($str1,$st){
echo $str1."\r\n";
echo $str2;
};
$demo("Tinywan");
}
funDemo(); //OK!

打印结果:100 200

PHP基础知识之————匿名函数(Anonymous functions)

PHP基础知识之————匿名函数(Anonymous functions)

PHP基础知识之————匿名函数(Anonymous functions)

PHP基础知识之————匿名函数(Anonymous functions)