所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现 callback 类型的参数,则该函数就是回调函数。上一节介绍了php可变参数的函数,这一节就进入php回调函数的学习。
回调函数的格式说明如下的所示:
mixed funName (callback arg) //在参数列表中使用伪类型 callback 描述
callback 也属于 PHP 中伪类型的一种,说明函数的参数需要接受另一个函数作为实参。一个很重要的问题是为什么要使用函数作为参数呢?前面介绍过了,通过参数的传递可以改变调用函数的执行行为,但有时仅将一个值传递给函数能力还是有限的。如果可以将一个用户自定义的执行过程传递到函数中使用,就大大增加了用户对函数功能的扩展。而如何声明和使用回调函数也是比较关键的问题,如果需要声明回调函数,就需要先了解一下变量函数。
变量函数
变量函数也称为可变函数。如果一个变量名后面有圆括号, PHP将寻找与变量的值同名的函数,并且将尝试执行它。例如,声明一个函数 test(),将函数名称字符串 test 赋值给变量 $demo。如果直接打印 $demo 变量,输出的值一定是字符串 test;但是如果在 $demo 变量后面加上圆括号 $demo(),则为调用对应 $demo 变量值 test 的函数。这样就可以将不同的函数名称赋给同一个变量,再通过变量去调用这个函数,类似于面向对象中多态特性的应用。
其实例代码如下所示:
<?php function one($a,$b){ return $a + $b; } function two($a,$b){ return $a*$b; } function three($a,$b){ return $a/$b; } $result = "one"; //将函数名one赋值给变量$result,执行$result()时则调用函数one() //$result = "two"; //将函数名two赋值给变量$result,执行$result()时则调用函数two() //$result = "three"; //将函数名three赋值给变量$result,执行$result()时则调用函数three() echo "结果是:".$result(4,6); //变量$result接收到哪个函数名的值,就调用哪个函数 ?>
在上面的实例中声明了 one()、two()和three()三个函数,分别用于计算两个数的和、乘积和商。并将三个函数的函数名(不带圆括号)以字符串的方式赋给变量 $result,然后使用变量名 $result 后面加上圆括号并传入两个整型参数,就会寻找与变量 $result 的值同名的函数执行。大多数函数都可以将函数名赋值给变量,形成变量函数。但变量函数不能用于语言结构。
使用变量函数声明和应用回调函数
如果要自定义一个可以回调的函数,可以选择使用变量函数帮助实现。在定义回调函数时,函数的声明结构是没有变化的,只要声明的参数是一个普通的变量即可。但在函数的内部应用这个参数变量时,如果加上圆括号就可以调用到和这个参数值同名的函数了,所以为其传递的参数一定要是另一个函数的名称字符串才行。使用回调函数的目的是可以将一段自己定义的功能传到函数内部使用。
其代码实例如下所示:
<?php //声明回调函数filter, 在0-10的整数中通过自定义条件过滤不要的数字 function filter($fun){ for($i=0; $i<=10; $i++){ //将参数变量$fun加上一个圆括号$fun(),则为调用和变量$fun值同名的函数 if($fun($i)) continue; echo $i.'<br>'; } } //声明一个函数one,如果参数是3的倍数就返回ture,否则返回false function one($num){ return $num%3 == 0; } //声明一个函数two,如果参数是一个回文数返回ture,否则返回false function two($num){ return $num == strrev($num); } filter("one"); //打印出10以内非3的倍数,参数one是函数one()的名称字符串,是一个回调 echo "---------------------<br>"; filter("two"); //打印出10以内非回文数,参数two是函数two()的名称字符串,是一个回调 ?>
运行的结果为:
在上面的实例中,如果声明的函数 filter()只是接受普通的值作为参数,则用户能过滤掉的数字就会比较单一。而本例中在定义的函数 filter()中调用到了通过参数传递进来的一个含税作为过滤条件,这样函数的功能就强大多了,可以在 filter() 函数中过滤掉你不喜欢的任意数字。在函数 filter()内部通过参数变量 $fun 加上一个圆括号 $fun(),就可以调用和变量 $fun 值相同的函数作为过滤的条件。例如,本实例中声明了 one() 和 two() 两个函数,分别用于过滤掉 10 之内 3 的倍数和回文数时,只要在调用 filter() 时将函数名称 one 和 two 字符串传递给参数,即将这两个函数传递给 filter() 函数内部使用。
这一章讲解了php回调函数的变量函数定义、声明和应用,下一章我们将介绍php回调函数的call_user_func_array()函数及其用法。
【相关教程推荐】
3. php实战视频教程
以上是php函数之回调函数(一)变量函数定义、声明和应用的详细内容。更多信息请关注PHP中文网其他相关文章!

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)

phpisusedforsenderemailsduetoitsbuilt-inmail()函数andsupportiveLibrariesLikePhpMailerandSwiftMailer.1)usethemail()functionforbasicemails,butithasimails.2)butithasimimitations.2)

PHP性能瓶颈可以通过以下步骤解决:1)使用Xdebug或Blackfire进行性能分析,找出问题所在;2)优化数据库查询并使用缓存,如APCu;3)使用array_filter等高效函数优化数组操作;4)配置OPcache进行字节码缓存;5)优化前端,如减少HTTP请求和优化图片;6)持续监控和优化性能。通过这些方法,可以显着提升PHP应用的性能。

依赖性注射(DI)InphpisadesignPatternthatManages和ReducesClassDeptions,增强量产生性,可验证性和Maintainability.itallowspasspassingDepentenciesLikEdenceSeconnectionSeconnectionStoclasseconnectionStoclasseSasasasasareTers,interitationApertatingAeseritatingEaseTestingEasingEaseTeStingEasingAndScalability。

cachingimprovesphpermenceByStorcyResultSofComputationsorqucrouctationsorquctationsorquickretrieval,reducingServerLoadAndenHancingResponsetimes.feftectivestrategiesinclude:1)opcodecaching,whereStoresCompiledSinmememorytssinmemorytoskipcompliation; 2)datacaching datacachingsingMemccachingmcachingmcachings


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器