加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP回调函数及匿名函数概念与用法详解

发布时间:2022-08-03 10:26:53 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP回调函数及匿名函数概念与用法,结合实例形式详细分析了PHP回调函数及匿名函数的概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下。 本文实例讲述了PHP回调函数及匿名函数概念与用法。分享给大家供大家参考,具体如下: 1
  这篇文章主要介绍了PHP回调函数及匿名函数概念与用法,结合实例形式详细分析了PHP回调函数及匿名函数的概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下。
 
  本文实例讲述了PHP回调函数及匿名函数概念与用法。分享给大家供大家参考,具体如下:
 
  1、回调函数
 
  PHP的回调函数其实和C、Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数;
 
  回调函数执行完毕之后,再回到主线程处理接下来的流程
 
  而在php调用回调函数,不想c以及java那样直接使用函数名作为函数参数,而是在php中使用函数对应的字符串名称执行
 
  1.1、无参数回调
 
  <?php
  //无参数回调
  function callback(){
    echo 'execute no parameters callback.<br/>';
  }
  function main($callback){
    echo 'execute main start.<br/>';
    $callback();
    echo 'execute main end.<br/>';
  }
  main('callback');
  //结果
  ecute main start.
  execute no parameters callback.
  execute main end.
  1.2、全局回调函数
 
  <?php
  //全局函数回调
  function callback($a,$b){
    echo "$a<====>$b.<br/>";
  }
  $func = 'callback';
  call_user_func($func, 1,2);
  call_user_func_array($func, array(1,2));
  //结果
  1<====>2.
  1<====>2.
  1.3、类方法及静态方法回调
 
  <?php
  class Test{
    //成员函数
    function callback($a,$b){
      echo "callback $a<====>$b.<br/>";
    }
    public static function staticCallback($a,$b){
      echo "staticCallback $a<====>$b.<br/>";
    }
  }
  //非静态方法调用方式一
  $test = new Test();
  call_user_func(array($test, 'callback'), 1,2);
  call_user_func_array(array($test, 'callback'), array(1,2));
  //非静态方法调用方式二
  $func = 'callback';
  $test->$func(7,9);
  //静态方法调用方式
  call_user_func(array('Test', 'staticCallback'), 4,6);
  call_user_func_array(array('Test', 'staticCallback'), array(4,6));
  call_user_func_array("Test::staticCallback", array(4,6));
  //结果
  callback 1<====>2.
  callback 1<====>2.
  callback 7<====>9.
  staticCallback 4<====>6.
  staticCallback 4<====>6.
  staticCallback 4<====>6.
  2、匿名函数
 
  2.1、php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值
 
  <?php
  $closureFunc = function($str){
    echo $str.'<br/>';
  };
  $closureFunc("hello world!");
  //结果
  hello world!
  2.2、闭包
 
  2.2.1、传入参数,引用局部变量
 
  <?php
  $closureFunc = function($name){
    $sex = '男';
    $func = function($age)use ($name,$sex){
      echo "$name--$sex--$age<br/>";
    };
    $func(23);
  };
  $func = $closureFunc("lvfk");
  //结果
  lvfk--男--23
  2.2.2、返回闭包函数
 
  <?php
  $closureFunc = function($name){
    echo 'closureFunc ';
    $sex = '男';
    echo "$name+++$sex<br/>";
    $func = function()use ($name,$sex){
      echo "$name--$sex<br/>";
    };
    return $func;
  };
  $func = $closureFunc("lvfk");
  $func();
  $func();
  //结果
  closureFunc lvfk+++男
  lvfk--男
  lvfk--男
  2.2.3、闭包改变上下文的值,需要引用传递
 
  <?php
  $closureFunc = function($name){
    $age = 1;
    echo "$name+++$age<br/>";
    $func = function()use ($name,&$age){
      $age++;
      echo "$name--$age<br/>";
    };
    return $func;
  };
  $func = $closureFunc("lvfk");
  $func();
  $func();
  $func();
  //结果
  lvfk+++1
  lvfk--2
  lvfk--3
  lvfk--4
  以上就是对闭包的简单应用,通过闭包,可以看出在函数外面使用闭包,传入闭包的参数内容,实际上可以是上下文对象内容,也可以在闭包内更改上下文对象值,但必须是引用传递。

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读