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();
在函数内部定义一个匿名函数,同时使用匿名函数,(这可不是闭包哦!!)
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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构