1. <?php
  2. /**
  3. * 回调函数:
  4. * 指调用函数时并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中
  5. * 使用回调函数可以 将一段自己定义的功能传到函数内部使用
  6. * 1. 变量函数(可变函数)
  7. * 变量后面有圆括号,PHP将寻找与变量的值同名的函数,并尝试执行
  8. */
  9.  
  10. // 变量函数
  11. function one(){
  12. echo 'one';
  13. }
  14. function two(){
  15. echo 'two';
  16. }
  17. function say($words){
  18. echo $words;
  19. }
  20. $a = 'one';
  21. $a();
  22. echo '<hr>';
  23. $a = 'two';
  24. $a();
  25. echo '<hr>';
  26.  
  27. /**
  28. * 借助变量函数,声明一个回调函数
  29. * @param callback $func 传递一个函数名称字符串作为参数
  30. */
  31. function whattodo($func){
  32. $func();
  33. }
  34.  
  35. whattodo('one');
  36. echo '<hr>';
  37.  
  38. /**
  39. * 借助call_user_func_array(callable $callback , array $param_arr ),自定义回调函数
  40. * 调用回调函数,并把一个数组参数作为回调函数的参数
  41. */
  42. function whattodo2(){
  43. call_user_func_array('say',array('hello word'));
  44. }
  45.  
  46. whattodo2();
  47. echo '<hr>';
  48.  
  49. /**
  50. * 借助call_user_func(callable $callback [, mixed $parameter [, mixed $... ]]),自定义回调函数
  51. * 把第一个参数作为回调函数调用
  52. */
  53. function whattodo3(){
  54. call_user_func('say','hello word!');
  55. }
  56.  
  57. whattodo3();
  58. echo '<hr>';
  59.  
  60. /**
  61. * 类中静态函数和对象的方法回调:
  62. * 回调类中的成员犯法:第一个参数必须使用数组,并且指定两个元素
  63. */
  64. class Demo{
  65. static function eat($food){
  66. echo $food;
  67. }
  68. }
  69. // 类名称字符串
  70. call_user_func_array(array("Demo","eat"),array('rice'));
    call_user_func_array("Demo::eat", array('rice'));
  71. echo '<hr>';
  72.  
  73. class Demo2{
  74. function play($play){
  75. echo $play;
  76. }
  77. }
  78. $obj = new Demo2();
  79. // 对象引用
  80. call_user_func_array(array($obj,"play"),array('play games'));
  81.  
  82. call_user_func_array(array(new Demo2(),"play"),array('play games'));

PHP函数总结 (五)的更多相关文章

  1. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

  2. resize函数有五种插值算法

    转自http://blog.csdn.net/fengbingchun/article/details/17335477 最新版OpenCV2.4.7中,cv::resize函数有五种插值算法:最近邻 ...

  3. 第196天:js---调用函数的五种方式

    一.普通方式 /*普通模式*/ // 声明一个函数,并调用 function func() { console.log("Hello World"); } func(); 二.函数 ...

  4. matlab自定义函数的五种表示(前2种重点)

    1.命令文件/函数文件+函数文件:多个M文件 2.函数文件+子函数:一个M文件 3. inline:无需M文件 4.符号表达式+subs方式:无需M文件 5.字符串+subs方式:无需M文件 第一种: ...

  5. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)

    今天,我们将着眼于五个用于序列的聚合运算.很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果. Enumerable 静态类的LINQ扩展方法可以做到这一点 .就像之前 ...

  6. python函数(五)

    函数 1.函数基本语法及特性 背景提要 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警, 你掏空了所有的知识量,写出了以下代码 ...

  7. Scala 函数(五)

    函数是一组一起执行一个任务的语句. 您可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的. Scala 有函数和方法, ...

  8. javascript调用Flash里对象的方法(函数)搞了五个小时。

    搞了几个小时后,才发现,之前走的路是错的. 今天在Firefox浏览器上测试一个javascript调用Flash中的一个对象的方法时遇到问题了, 一搞就整整搞了一个下午. 我记得之前我用Flash8 ...

  9. python第十四课--排序及自定义函数之自定义函数(案例五)

    演示函数的定义和使用细节: 默认参数:#在设计自定义函数的时候,就存在一个默认值,就算在调用的时候不显示的传入实参,也不会报错.#会用默认值来代替参与后期的运算 def m1(name='张三',ag ...

  10. TypeScript 函数 (五)

    传递给一个函数的参数个数必须与函数期望的参数个数一致. 参数类别: 必须参数 可选参数 :可选参数必须在参数后面. 默认参数 :当用户没有传递这个参数或传递的值是undefined时. 它们叫做有默认 ...

随机推荐

  1. 学习Linux的正确姿势

    学习Linux的正确姿势 端正学习态度1.Linux不等于骇客(or Cracker).当然众所周知很多“黑客工具”都是Linux平台上的,我帮助过很多Linux小白发现他们殊途同归都是朝着类似Air ...

  2. EasyUI+bootsrtap混合前端框架

    EasyUI+bootsrtap混合前端框架 http://www.jeasyui.com/download/index.php用户没有登录前浏览的页面用bootsrtap框架用户登录进去后的商家管理 ...

  3. DNS服务器原理介绍(一)

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...

  4. TED #09# You don't have to be an expert to solve big problems

    Tapiwa Chiwewe: You don't have to be an expert to solve big problems Collection noticed a haze hangi ...

  5. Python学习笔记之@classmethod与@staticmethod

    Python面向对象编程中,类中定义的方法可以是 @classmethod 装饰的 类方法 ,也可以是 @staticmethod 装饰的 静态方法 ,用的最多的还是不带装饰器的 实例方法 ,如果把这 ...

  6. 20145216史婧瑶《网络对抗》逆向及Bof进阶实践

    20145216史婧瑶<网络对抗>逆向及Bof进阶实践 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢 ...

  7. Socket:读写处理及连接断开的检测

    作为进程间通信及网络通信的一种重要技术,在实际的开发中,socket编程是经常被用到的.关于socket编程的一般步骤,这里不再赘述,相关资料和文章很多,google/baidu即可. 本文主要是探讨 ...

  8. Cocoa 初识

    1,判断程序是否第一次启动 OC: if (![[NSUserDefaults stringOfKeyInStandardDefaults:FirstOpenApp] boolValue]) { [s ...

  9. 奇怪的问题:改变了界面,生成的exe不起作用

    现象:修改ui界面的控件,如改变text,生成exe没有改变,清理.重新创建也没有作用 原因:ui.h没有被更新,每次软件生成的时候都是调用的旧的文件 解决:先将debug和release文件夹删除, ...

  10. 网络安全、Web安全、渗透测试之笔经面经总结(三)

    本篇文章涉及的知识点有如下几方面: 1.什么是WebShell? 2.什么是网络钓鱼? 3.你获取网络安全知识途径有哪些? 4.什么是CC攻击? 5.Web服务器被入侵后,怎样进行排查? 6.dll文 ...