PHP 函数之 call_user_func & call_user_func_array

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

参数1: 调用一个回调函数, 

参数2: 数组参数是回调函数的参数.


call_user_func(callable $callback, $mixed $parameter, $mixed $...)

参数1:调用的回调函数

参数2-n:回调函数的参数.


比较这两者的不同哦. 前者的第二个参数必须是 数组.


情况一:调用普通的函数.

<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
?> 

这里,第一个参数直接指定函数的名称.

<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func_array('barber', array("mushroom"));
call_user_func_array('barber', array("shave"));
?> 

还是比较一下这两者之间的不同.

看出来的请继续.


情况二: 调用类中的静态函数.

下面是call_user_func_arr

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}
}
echo call_user_func_array(__NAMESPACE__.'\F::showName', array('vein'));
echo call_user_func_array(array(__NAMESPACE__.'\F', 'showName'), array('vein'));
$f = new F();
echo call_user_func_array(array($f, 'showName'), array('vein'));

下面是call_user_func 

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}
}
echo call_user_func(__NAMESPACE__ . '\F::showName','vein');
echo call_user_func(array(__NAMESPACE__ . '\F','showName'),'vein');

$f = new F();
echo call_user_func(array($f, 'showName'),'vein');	

情况三:动态方法调用

call_user_func

namespace Foo;
class F {
	public function showAge ($age) {
		return $age + 100;
	}
}
call_user_func(__NAMESPACE__ . '\F::showAge',23);

这里要注意一点,如果这样调用的话,系统会报错,提示

call_user_func() expects parameter 1 to be a valid callback, non-static method Foo\F::showAge() should not be called s
tatically

解释一下: 这个函数的第一个参数必须是 有效的回调函数, 非静态的方法showAge() 是不允许调用的.

需要的解决方案是:

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}

	public function showAge ($age) {
		return $age + 100;
	}
}
$f = new F(); 
echo call_user_func(array($f, 'showAge'),23);


对于这样的动态函数的调用,必须提前进行对象实例化,

然后将实例化之后的对象传入函数作为第一个参数.


call_user_func_array :

namespace Foo;
class F {
	public static function showName ($name) {
		return strtoupper($name);
	}

	public function showAge ($age) {
		return $age + 100;
	}
}
$f = new F(); 
echo call_user_func_array(array($f, 'showAge'),array(23));

这样也是可行的.


总结一下: call_user_func_array 和 call_user_func 两个函数基本上是类似的,只是在调用上传递参数时存在一些差异.

记住一点,call_user_func_array 传递的第二个参数必须是数组,

call_user_func 传递的第二个参数可能是数组.如果是多个参数的话,还是需要以列表的形式列出.



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

相关推荐

PHP 中 call_user_func 的使用

PHP 中 call_user_func 的使用

wgchen 855

PHP call_user_func理解

 call_user_func():调用一个回调函数处理字符串,   可以用匿名函数,可以用有名函数,可以传递类的方法,   用有名函数时,只需传函数的名称   用类的方法时,要传类的名称和方法名   传递的第一个参数必须为函数名,或者匿名函数,或者方法   其他参数,可传一个参数,或者多个参数,这些参数会自动传递到回调函数中   而回调函数,可以通过传参,获取这些参数   返回回调函数处理后的结...

a18827547638的博客 7251

通达信浮筹多空波段抓牛擒龙指标公式源码

VAR33:=VA3>=REF(VA4,1) AND C<REF(C,1) AND VAR19=60 AND VAR18=0 AND 活跃线>=REF(活跃线,1) AND VA12<REF(VA13,1);DRAWTEXT(VAR28 AND COUNT(VAR28,30)=1,65,' ★超涨注意风险'),COLOR0000FF;DRAWTEXT(VAR26 AND COUNT(VAR26,30)=1,90,' ←继续等'),COLOR00FFFF;浮筹线:VA3,COLORFF00FF;

2401_86043146的博客 5253

PHP call_user_func_array回调函数 call_user_func_array函数详解

call_user_func_array PHP官方 call_user_func_array讲解 call_user_func_array (PHP 4 &gt;= 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数` 范例 使用第一种情况 &lt;?php //单个参数 function LovePhp...

freedom_fd的博客 8289

FMEA-MSR步骤三:功能分析

目的 FMEA-MSR功能分析的主要目标: ● 功能及各功能之间的关系的可视化 ● 功能树/网络或等效功能矩阵参数图(P图) ● 顾客(外部和内部)功能与相关要求的关联 ● 要求或特性与功能的关联 ● 工程团队(系统、安全和组件)之间的协作 ● 失效分析步骤的基础 (点击链接进入官网领取软件试用) 在监视及系统响应的补充FMEA中,对失效探测和失效响应的监视视为其具有的功能。硬件和软件功能可能包括监视控制状态的功能。 故障/失效的监视和探测功能可能包括超出范围的探测、循环冗余校验、真实性检查和序列计数器检查

Infomass的博客 2389

瑞芯微RK3506开发板DSM音频开发避坑指南:从硬件改接到内核配置全流程

本文详细解析了在瑞芯微RK3506开发板上进行DSM音频开发的完整流程与关键避坑点。内容涵盖从硬件改造(如电阻焊接)、内核驱动配置(DTS参数、补丁应用)到系统调试与波形分析的全过程,旨在帮助嵌入式开发者高效实现高信噪比、低成本的音频方案,避免常见错误。

weixin_29164091的博客 405

`call_user_func()`和`call_user_func_array()`都能执行回调,但前者支持“参数逐个传递“,后者支持“参数数组传递“,这两种方式在处理引用参数(&$var)时有什么

引用参数(&$var)就像给变量起了个别名,函数里修改这个参数,会直接影响外面的原变量。$num++;$a = 1;addOne($a);echo $a;// 输出2(原变量被修改了)会“复制参数”,导致引用失效,原变量不会被修改;会“原样传递数组里的参数”,如果数组里明确写了&$var,引用就有效,原变量会被修改。区别的核心在于参数传递的方式:逐个传递时会丢引用,数组传递时能保留引用。所以如果你的回调函数需要修改外部变量(用了&$var),就得用,并且在参数数组里加上符号。

长风破浪会有时的博客 354

一种基于因果干预的少样本学习的故障诊断模型

本文提出CIRNet,一种融合元学习与因果干预的少样本故障诊断框架。针对传统方法易学习伪相关特征的问题,CIRNet通过构建结构因果模型,采用类级和特征级双调整策略消除先验知识干扰。实验在多个轴承/齿轮数据集上验证其有效性,在跨组件任务中准确率最高达93.41%,特征可视化显示更好的类可分性。相比现有方法,CIRNet显著提升了模型泛化能力和可解释性。

hasakie的博客 955

call_user_func_array函数详解

call_user_func_array : 调用回调函数,并把一个数组参数作为回调函数的参数。 说明:mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 返回回调函数的结果。如果出

weihuiblog的博客 3万+

电脑硬件:电脑主板上的接口介绍,看完你就懂了

它们主要用于连接老式的键盘和鼠标,虽然速度和兼容性不如USB接口,但在某些特定场合依然发挥着重要作用。PCIe接口是主板上的扩展能力象征,可以连接各种扩展卡,如显卡、声卡、网卡等。电脑主板作为电脑硬件组成关键的部分,今天给大家分享一下电脑主板上有哪些接口,具体每一个接口的特点、使用场景,有需要的朋友可以来了解一下!它们不仅能连接鼠标、键盘、U盘、打印机,还能连接各种外设,如移动硬盘、游戏手柄等。:虽然现在用得越来越少,但在一些特定场合,如工业控制、老旧设备上,仍然需要使用PS/2接口。

IT技术分享社区 2785

linux cma alloc fail 问题分析

摘要:日志显示CMA连续内存分配失败(错误码-ENOMEM),请求128页(512KB)内存时因CMA区域不足或内存碎片导致失败。分析发现系统CMA总内存131072KB,空闲65536KB。解决方案包括:1)手动触发内存碎片整理;2)修改设备树或内核配置增大CMA区域(如从16MB增至20MB)。通过调整CONFIG_CMA_SIZE_MBYTES或设备树中的size参数可解决该问题。

陌上花开缓缓归以的博客 796

call_user_func和call_user_func_array的用法详解

call_user_func和call_user_func_array的用法详解

risingsun001的专栏 3672

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3341

call_user_func和call_user_func_array的差别

很多开源的PHP框架和系统,均有使用到call_user_func和call_user_func_array这两个函数,如CI、TP、discuz等等。那么,这两个函数有什么作用呢?又有什么区别呢? 两个函数都是当需要动态调用函数时用到的,函数名不确定,参数不确定的情况下用到,至于区别下面会提到。 大部分PHP都知道,调用一个函数,直接写函数名并和括号就可以了,如 1、调用没有参数的函数

森森 2266

SAP 物料的与压缩库存数据不一致

总结:发生这个问题的原因多数会发生在测试系统在拷贝正式系统的时候会发生这样的情况,系统在拷贝的时候,业务数据还在发生,就会导致数据拷贝的时候丢失数据。经过查询发现是由于物料分类账中的物料的库存数量和 ACDOCA_M_EXTRACT表中的数量对不上,导致系统抛出报错的信息。由于是测试系统,直接更改表的数据,把ACDOCA_M_EXTRACT表中的库存数据和金额与物料分类账中的数据保持一致。在测试系统中进行501和561增加库存的时候,系统提示物料的预压缩库存数据不一致的报错。

我小时候很黑的博客 3299

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

php call_user_func_array和call_user_func函数

call_user_func_array (PHP 4 &gt;= 4.0.4, PHP 5) call_user_func_array-- Call a user function given with an array of parameters Description mixedcall_user_func_array( callback function, array par...

mengzuchao的专栏 920

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php中call_user_func 与 call_user_func_array的使用详解

函数解释: call_user_func—把第一个参数作为回调函数调用官方文档 call_user_func_array—调用回调函数,并把一个数组参数作为回调函数的参数 官方文档 代码: &lt;?php /** * 自定义方法test * @param $a 参数a * @param $b 参数b */ function test($a, $b) { ec...

༺墨༒眉༻ 912

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

了解php中call_user_func 与 call_user_func_array的使用及区别

一:方法解释 call_user_func:把第一个参数作为回调函数进行调用,其余参数作为回调函数的参数 call_user_func_array:把第一个参数作为回调函数进行调用,第二个参数传入数组,将数组中的值作为回调函数的参数 二:call_user_func和call_user_func_array简单介绍 1:第一个参数传入方法名 例: (1)原生php中使用: functiontest($test1,$test2){ return$test1.$test2; } ec...

huaweichenai的博客 1211

call_user_func_array详解

call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 说明  mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。 参数  c

一亩地的专栏 2465

简单理解call_user_func和call_user_func_array两个函数

简单理解call_user_func和call_user_func_array两个函数 描述   call_user_func():调用一个回调函数处理字符串,   可以用匿名函数,可以用有名函数,可以传递类的方法,   用有名函数时,只需传函数的名称   用类的方法时,要传类的名称和方法名   传递的第一个参数必须为函数名,或者匿名函数,或者方法   其他参数,可传一个参数,或者多个参...

dengliu_2017的博客 603

PHP反序列化5(回调函数call_user_func_array)

考点5:回调函数call_user_func_array()

2302_81328699的博客 1334

php学习之道:call_user_func和call_user_func_array的用法

call_user_func ( callback $function [, mixed $parameter [, mixed $... ]] )  调用第一个参数所提供的用户自定义的函数。 返回值:返回调用函数的结果,或FALSE。 example : Php代码   function eat($fruit) //参数可以为多个   {

Java小迷的专栏 1826

PHP函数详解:call_user_func()使用方法

call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: &lt;?php function nowamagic($a,$b) { echo $a; echo $b; } call_user_func('nowamagic', "111","222"); call_user_func('nowamagic', "333"...

weixin_41981080的博客 1027

如何使用PHP的call_user_func()和call_user_func_array()函数?

想象一下,现在你不仅仅是一个小厨师,还是一个面包店的老板。想象一下,你现在是一个小厨师,你有很多食谱(也就是函数),但是你不想去一一记住每个食谱的做法(函数的调用方法),这个时候你就可以请一个小助手(有时候,你要调用的函数有很多参数,而且这些参数已经储存在一个数组里面了,这个时候,你就可以使用。是一个很有趣的函数,它可以帮助我们调用其他函数,就像是我们请一个小助手去帮我们做某件事情一样。会把数组中的每个元素作为函数的参数传入,而不是把整个数组作为一个参数。在实际使用中,请根据你的需求来调整代码。

长风破浪会有时的博客 1005

PHP call_user_func来实现链式操作详解

在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是: strlen(trim($str)); 如果要实现类似js中的链式操作,比如像下面这样应该怎么写? $str-&gt;trim()-&gt;strlen(); 这样代码更简洁,逻辑更清晰,下面分别用三种方式来实现: 方法一、使用魔法函数__call结合call_user_func来实现 链式操作的核心是返回...

小龙在线 952
上一篇: mysql 数据库插入语句之insert into,replace into ,insert ignore
下一篇: 关于 PHP Boolean 的细节
jjvein
博客等级 码龄14年 29粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值