PHP回调函数

深入探讨PHP中的call_user_func函数及其用法 下面是一个简单的示例,展示了如何使用$name!在上面的示例中,我们定义了一个函数,它接受一个参数$name并打印出问候语。然后,我们将函数名存储在变量中,并使用来调用该函数,同时传递参数'John'。通过,我们可以通过函数名的字符串形式来调用自定义函数,从而实现函数的动态调用。 阅读详情

回调函数

我们调用php系统提供的函数叫直接调用,也叫: 直调,而php系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调。在PHP中有两种常见的回调函数:call_user_func()和call_user_func_array(),它们可以代替系统来调用我们自己定义的函数:

call_user_func_array($callback, $array):使用数组参数执行回调函数
call_user_func($callback, $array):第一个参数作为回调函数调用
说明:1.回调中通常不需要写参数,而是通过其它函数来获取;   2.参数不允许使用引用传递

call_user_func

1、单个参数:

<?php
  
echo call_user_func(function(){

    //如果匿名回调没写参数,可以通过func_get_args()获取

    return '欢迎来到'.func_get_arg(0);

},'Baidu');

echo '<hr>';

echo call_user_func(function($site){

    return '欢迎来到'.$site;

},'Baidu');

echo '<hr>';

?>

2、多个参数:

<?php
echo call_user_func(function($site,$course){

    return '欢迎来到'.$site.'学习'.$course.'课程';

},'w3school','php');

echo '<hr>';

//支持调用类中的方法做为回调

class Demo1
{
    //普通方法
    public function sum($a, $b)
    {
        return $a+$b;
    }
}
class Demo2

{
    //静态方法
    public static function multi($a,$b)

    {
        return $a*$b;
    }

}

?>

调用普通方法:回调必须以数组方式传入: [对象,'方法名']

$obj = new Demo1;  
echo call_user_func([$obj,'sum'],10,15);

php5.4+以上,可以简写:

echo call_user_func([(new Demo1()),'sum'],10,15);  
echo '<hr>';

调用静态方法:有字符串和数组二种方式

A、字符串: '类名::方法名'

echo call_user_func('Demo2::multi',10,15);

B、数组: [类名,'方法名']

echo call_user_func(['Demo2','multi'],20,5);

如果有命名空间,只要在类名前加上命名空间字符串就可以了,或者用常量__NAMESPACE__

理解了call_user_func()那么call_user_func_array()就非常简单了,仅仅是参数不同

call_user_func_array(callback, array)

只接受二个参数:回调,索引数组,传给回调的参数全部打包到索引数组中,与call_user_func(array,arg1...)不同之处仅仅传递参数方式不同,回调同样支持:字符串函数名,类名,数组,匿名函数

<?php

echo '<hr>';

echo call_user_func_array(function(){

    //查看传递给回调的参数

  //return print_r(func_get_args(),true);

    $msg = '前端开发的基础知识包括:';

    //遍历参数数组

    foreach (func_get_args() as $value) {

        $msg .= $value.',';
    }

    //去掉未尾逗号,并替换成感叹号
    return rtrim($msg,',').'!';

}, ['html','css','javascript']);

echo '<hr>';

class Demo3

{
    public function func1()

    {
        return __METHOD__.'<pre>'.print_r(func_get_args(),true).'</pre>';
    }
}

class Demo4 

{
    public static function func2()

    {
        return __METHOD__.'<pre>'.print_r(func_get_args(),true).'</pre>';
    }
}

?>

回调类中的方法

echo call_user_func_array([(new Demo3),'func1'], ['php','java','c']);

调用静态方法的回调:

1.使用数组参数方式

echo call_user_func_array(['Demo4','func2'], ['html','css','jQuery']);

2.使用字符串参数方式

echo call_user_func_array('Demo4::func2', ['html','css','jQuery']);

如果有命名空间,只需要在类名前加上命名空间或__NAMESPACE__即可

参考:https://www.php.cn/

PHP自定义函数call_user_func和call_user_func_array详解 这使得我们能够根据需要动态地调用不同的函数,并且可以在运行时根据条件决定要调用的函数。这些函数在某些情况下非常有用,例如在回调函数和事件处理程序中,或者当我们需要根据用户的输入来决定要调用的函数时。这两个函数提供了一种动态调用函数的能力,可以根据函数名的字符串形式来调用函数,而不需要提前知道函数的具体名称。函数非常相似,但是它允许我们将参数作为数组传递给被调用的函数。是一个包含参数的数组,这些参数将作为数组元素依次传递给被调用的函数。可以是一个函数名的字符串,也可以是一个包含类名和方法名的数组。 阅读详情

相关推荐

回调函数的原理及PHP实例

背景:在最近的一个开发项目中,用户要先调用服务才能开始进行一系列的查询活动,想了好久,经同事提醒, 用回调函数即可解决该问题。在这里,对PHP下回调函数的原理及实现分别做一下讲解。 1 什么是回调        软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是

飞越蓝天的专栏 1万+

PHP的回调函数

所谓的回调函数,就是指调用函数时并不是向函数中传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的函数中,这个作为参数的函数就是回调函数。通俗的来说,回调函数也是一个我们定义的函数,但是不是我们直接来调用的,而是通过另一个函数来调用的,这个函数通过接收回调函数的名字和参数来实现对它的调用。 PHP 中的回调函数与 C、Java 等语言的回调函数的作用是一模一样的,都是在函数执行的过程...

牛奔的博客 546

投第一篇SCIE英文期刊(详细步骤)

一个投稿SCIE英文期刊的过程

weixin_48849679的博客 1万+

PHP回调函数用法及分析

一、回调函数的概念 先看一下C语言里的回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 其他语言里的回调函数的概念与之相似,只不过各种语言里回调函数的实现机制不一...

大道至简,持之以恒! 1万+

Centos7安装NVIDIA驱动并在docker容器中使用GPU

Centos7安装NVIDIA驱动并在docker容器中使用GPU

运维giao的博客 2084

Android 集成Chrome 浏览器内核 Crosswalk

Crosswalk 内核的兴起与消亡 Android 4.4 版本之前,使用的是基于 androidWebKit 的 WebView 但实际上,由于 Android 的碎片化问题(大量存在不同的 Android 系统版本,并且各个厂商对内置应用进行定制化,有可能用的不是最新的浏览器内核)。这就导致 WebView 在真实环境中对 API 的支持根本无迹可寻,越发混乱。 随着混合开发的兴起,前端对 ...

司马懿的西山居 2万+

Php所有回调函数,相关PHP回调函数的乌云

有关PHP回调函数的乌云。本人较菜,请问各位侠士,如何在PHP中达到EventStack的NotifyWatcher方法可以将取得的数据返还给welcome.php指定的回调函数,我哪里写的不对啊???出现的错误为:Fatalerror:Functionnamemustbeastringin/home/latel/Workspace/new_zhebo/module/Event...

weixin_26781975的博客 105

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

php回调函数

最近学习到php的回调函数,发现还是蛮难理解的,于是找了度娘查了各种资料来整理出这篇博客。什么是回调函数我在网上找了好些解释,找到一个我认为比较合理的适合php的回调函数: 使用回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完

tyro_blog的博客 1812

告别Arduino IDE!用VSCode搭建Arduino UNO R3开发环境(含代码补全配置)

本文详细指导如何用VSCode替代Arduino IDE搭建Arduino UNO R3开发环境,包含代码补全配置和高效开发技巧。通过安装必要插件、配置项目结构和优化工作流,可显著提升开发效率,特别适合复杂项目开发。文章还提供了常见问题解决方案和高级功能调优方法。

weixin_30698297的博客 479

【系统架构设计师】论文模板样例:论软件系统架构风格

本人于年月参与项目,该系统为*,在该项目组中我担任系统架构师岗位,主要负责系统整体架构设计。本文以该车联网项目为例,主要讨论了软件架构风格在该项目中的具体应用。底层架构风格我们采用了虚拟机风格中的解释器,因该公交共有几十种不同的数据协议,使用解释器风格可以满足整车数据协议兼容性需求;中间层关于应用层的数据流转采用了独立构件风格中的隐式调用,以减低系统间耦合度、简化软件架构,提高可修改性方面的架构属性;应用系统层采用了B/S的架构风格,统一解决公交行业性难题“实施推广难、维护难”问题。

数据知道的博客 9928

PHP 回调函数

PHP回调函数允许将函数作为参数传递,实现灵活调用。基础用法包括使用call_user_func调用普通函数或匿名函数,如array_map对数组元素应用回调处理。高级应用涉及类方法(静态方法用'ClassName::method',对象方法用[$obj,'method'])和可调用对象(实现__invoke())。回调函数广泛应用于数组操作(array_filter等)、动态调用等场景,使用时需注意验证可调用性(is_callable)和类型提示(callable)。合理使用回调能提升代码模块化和复用性。

2504_92675651的博客 542

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数,比较通用,包含所有对象类型,可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数。

qq_39541524的博客 827

php中应用回调函数的实际例子说明回调函数的用法

回调函数是php编程中使用频率较高的一类函数,那么,php回调函数是什么样的,又该如何使用回调函数,下面两个简单的例子来说明回调函数的用法: 回调函数例子1: <?php // 回调函数 带有callback,就是调用这个函数需要传一个函数进来(函数名/函数名字串)function demo1($x,$y){ return $x*$y; } function demo2($x,$y){

跑马遛驹优快云学习记录 1万+

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4706

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

php--回调函数

字符串形式: function test($str) { return $str; } $ree = 'you'; $res = call_user_func('test',$ree); echo $res; 数组形式: class myClass { function test($res) { return $res; } } $str = ...

张默的博客 271

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

php中的回调函数是什么意思,php回调函数是什么样子的?

hp内置函数中很多用到了回调函数,像:array_filter — 用回调函数过滤数组中的单元。array_diff_ukey — 用回调函数对键名比较计算数组的差集。这里的回调函数好像和普通函数没什么区别,求解,php回调函数是什么样子的?靠什么原理运行?回调函数就是那些自己写的,但是不是自己来调,而是给别人来掉的函数。就像下面的odd()和even()函数一样。...

weixin_31240135的博客 253

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

php回调函数如何执行顺序,PHP回调函数简单用法示例

本文实例讲述了PHP回调函数简单用法。分享给大家供大家参考,具体如下:php中提供了两个内置的回调函数call_user_func()、call_user_func_array()。这两个函数的区别是:call_user_func_array(callable $callback,array $param_arr)是以数组的形式接受回调函数和参数的。call_user_func($callback...

weixin_29016315的博客 212

php回调函数是怎么实现的,JS回调函数原理与用法详解【附PHP回调函数】

本文实例讲述了JS回调函数原理与用法。分享给大家供大家参考,具体如下:JS回调函数何为回调函数,官方解释:当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callbac...

weixin_42498766的博客 244

常见的PHP回调函数,几种PHP回调函数简介

本文主要和大家分享几种PHP回调函数简介,主要以代码的方法,希望能帮助到大家。匿名函数$server->on('Request', function ($req, $resp) { echo "hello world";});类静态方法class A{ static function test($req, $resp){ echo "hello world";}}$...

weixin_29114331的博客 387

php 回调函数

C / C++传递回调函数时,一般是传一个函数指针,而php比较有意思,传函数名的字符串就行。function add($a, $b){    return $a + $b;}function test($func, $a, $b){    if (function_exists($func)       echo $func($a, $b);    else       echo "bad fu

Rare's Tech-Blog 514

php回调函数如何执行顺序,PHP回调函数概念与用法实例分析

本文实例讲述了PHP回调函数概念与用法。分享给大家供大家参考,具体如下:一、回调函数的概念先看一下C语言里的回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。其他语言里的回调...

weixin_29461699的博客 199
上一篇: 渗透测试环境DoraBox环境搭建
下一篇: MySQL中的Information_schema
FLy_鹏程万里
FLy_鹏程万里 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄9年 1万+粉丝 1364原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLy_鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值