php函数之回调函数(一)变量函数定义、声明和应用

伊谢尔伦
发布: 2017-05-12 11:33:00
原创
3812人浏览过

所谓回调函数,就是指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现 callback 类型的参数,则该函数就是回调函数。上一节介绍了php可变参数的函数,这一节就进入php回调函数的学习。

回调函数的格式说明如下的所示:

mixed funName (callback arg)   //在参数列表中使用伪类型 callback 描述
登录后复制

callback 也属于 PHP 中伪类型的一种,说明函数的参数需要接受另一个函数作为实参。一个很重要的问题是为什么要使用函数作为参数呢?前面介绍过了,通过参数的传递可以改变调用函数的执行行为,但有时仅将一个值传递给函数能力还是有限的。如果可以将一个用户自定义的执行过程传递到函数中使用,就大大增加了用户对函数功能的扩展。而如何声明和使用回调函数也是比较关键的问题,如果需要声明回调函数,就需要先了解一下变量函数。

变量函数

变量函数也称为可变函数。如果一个变量名后面有圆括号, PHP将寻找与变量的值同名的函数,并且将尝试执行它。例如,声明一个函数 test(),将函数名称字符串 test 赋值给变量 $demo。如果直接打印 $demo 变量,输出的值一定是字符串 test;但是如果在  $demo 变量后面加上圆括号  $demo(),则为调用对应  $demo 变量值 test 的函数。这样就可以将不同的函数名称赋给同一个变量,再通过变量去调用这个函数,类似于面向对象中多态特性的应用。

立即学习PHP免费学习笔记(深入)”;

其实例代码如下所示:

<?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 的值同名的函数执行。大多数函数都可以将函数名赋值给变量,形成变量函数。但变量函数不能用于语言结构。

使用变量函数声明和应用回调函数

如果要自定义一个可以回调的函数,可以选择使用变量函数帮助实现。在定义回调函数时,函数的声明结构是没有变化的,只要声明的参数是一个普通的变量即可。但在函数的内部应用这个参数变量时,如果加上圆括号就可以调用到和这个参数值同名的函数了,所以为其传递的参数一定要是另一个函数的名称字符串才行。使用回调函数的目的是可以将一段自己定义的功能传到函数内部使用。

其代码实例如下所示:

MATLAB 函数帮助文档 中文WORD版
MATLAB 函数帮助文档 中文WORD版

函数是一组语句一起执行任务。在MATLAB中,函数定义在单独的文件。文件函数的文件名应该是相同的。 函数操作在自己的工作空间,它也被称为本地工作区,独立的工作区,在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。函数可以接受多个输入参数和可能返回多个输出参数 。 MATLAB是MathWorks公司开发的一种编程语言。它最初是一个矩阵的编程语言,使线性代数编程很简单。它可以运行在交互式会话和作为批处理作业。有需要的朋友可以下载看看

MATLAB 函数帮助文档 中文WORD版 1
查看详情 MATLAB 函数帮助文档 中文WORD版
<?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()的名称字符串,是一个回调
?>
登录后复制

运行的结果为:

154.png

在上面的实例中,如果声明的函数 filter()只是接受普通的值作为参数,则用户能过滤掉的数字就会比较单一。而本例中在定义的函数 filter()中调用到了通过参数传递进来的一个含税作为过滤条件,这样函数的功能就强大多了,可以在  filter() 函数中过滤掉你不喜欢的任意数字。在函数  filter()内部通过参数变量 $fun 加上一个圆括号 $fun(),就可以调用和变量  $fun 值相同的函数作为过滤的条件。例如,本实例中声明了 one() 和 two() 两个函数,分别用于过滤掉 10 之内 3 的倍数和回文数时,只要在调用  filter() 时将函数名称 one 和 two 字符串传递给参数,即将这两个函数传递给  filter() 函数内部使用。

这一章讲解了php回调函数的变量函数定义、声明和应用,下一章我们将介绍php回调函数的call_user_func_array()函数及其用法

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.  php编程从入门到精通全套视频教程

3.  php实战视频教程

以上就是php函数回调函数(一)变量函数定义、声明和应用的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号