博客
关于我
call_user_func函数和call_user_func_array函数
阅读量:490 次
发布时间:2019-03-07

本文共 1509 字,大约阅读时间需要 5 分钟。

PHP函数调用方法——call_user_func与call_user_func_array

PHP中的call_user_func和call_user_func_array是用于动态调用函数或方法的高级功能,能够以函数名或数组形式引用类方法,极大地方便了代码的灵活性和复用性。

call_user_func的使用场景

call_user_func函数可以将字符串函数名传递给一个可执行的上下文,可以接受任意数量的参数。以下是其基本使用方法:

function nowamagic($a, $b) {    echo $a;    echo $b;}call_user_func('nowamagic', "111", "222");call_user_func('nowamagic', "333", "444");// 输出: 111 222 333 444    

此外,call_user_func还支持通过数组的形式传递类名和方法:

class a {    public function b($c) {        echo $c;    }}call_user_func(array("a", "b"), "111");// 输出: 111    

call_user_func_array的特点

call_user_func_array与call_user_func相似,但它以数组的形式传递参数,适合处理多参数或引用类型的函数:

function a($b, $c) {    echo $b;    echo $c;}call_user_func_array('a', array("111", "222"));// 输出: 111222    

同样,call_user_func_array也支持通过数组引用类方法:

class ClassA {    public function bc($b, $c) {        $bc = $b + $c;        echo $bc;    }}call_user_func_array(array('ClassA', 'bc'), array("111", "222"));// 输出: 333    

参数传递与引用

call_user_func和call_user_func_array都支持参数传递和引用机制,能够更灵活地使用函数和类方法。此外,可有效控制函数或方法的参数类型和默认值:

function aa($b) {    $b++;}$c = 0;call_user_func('aa', $c);echo $c; // 输出: 1call_user_func_array('aa', array($c));echo $c; // 输出: 2    

功能扩展与应用场景

两者都支持引用机制,可轻松实现变量的可修改性,例如对变量进行增量操作:

function increment(&$var) {    $var++;}$a = 0;call_user_func('increment', $a);echo $a; // 输出: 0call_user_func_array('increment', array($a));echo $a; // 输出: 1    

转载地址:http://fszjz.baihongyu.com/

你可能感兴趣的文章
Dijkstra算法之matlab实现
查看>>
嵌入式中使用命令行调试程序
查看>>
Unsupported SFP+ Module
查看>>
linux 中改变运行程序的 stdout
查看>>
dpdk 程序创建 kni 虚拟网络接口失败的问题
查看>>
uio 设备文件创建以及 iommu 导致 x710 网卡初始化失败问题
查看>>
patchelf 的功能以及使用 patchelf 修改 rpath 以解决动态库问题
查看>>
关调度与关中断
查看>>
rt-thread 使用心得
查看>>
c 语言结构体 padding 的问题
查看>>
Leetcode第557题---翻转字符串中的单词
查看>>
IDEA:修改编辑区背景色
查看>>
VS 用户自定义控件未出现在工具箱的解决方案
查看>>
正则表达式用法
查看>>
IDEA Properties中文unicode转码问题
查看>>
CSS 不换行
查看>>
VS 单元测试报错处理 Castle.Core
查看>>
C# WinForm 圆角button
查看>>
.mpp文件在线打开网址
查看>>
C#中的委托(delegate)
查看>>