PHP 中call_user_func相关函数的使用
call_user_func
官方的解释是:把第一个参数作为回调函数(callback),并且将其余的参数作为回调函数的参数。
第一个参数可以是函数名,后面的均为作为该函数使用的参数。
1. call_user_func的初步使用
看例子:
// 1. 初步使用
function sayHi($name){
echo $name .' say hi' ."<br>";
} call_user_func('sayHi','Bob');
call_user_func('sayHi','Jack');
输出:
Bob say hi
Jack say hi
2. call_user_func用于递归函数中
著名的斐波那契函数,如果哪天我们改变了函数名即Factorial,那么该函数会报错,因为内部也使用到了Factorial。
function Factorial($i=1) {
return ($i==1 ? 1 : $i*Factorial($i-1));
}
改进一下:
function FactorialImprove($i=1){
return ($i == 1 ? 1 : $i * call_user_func(__FUNCTION__,$i-1));
}
这样的话如果外部函数名怎么变都不会出错。这里用到了PHP中的 __FUNCTION__ 魔法常量。
3. 类似的call_user_func_array
该函数接收两个参数,第一个参数不变,函数名,第二个是参数数组。
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4)));
其实 call_user_func 函数在事件处理中有起到非常重要的作用。
看下一篇,PHP的事件处理。
PHP 中call_user_func相关函数的使用的更多相关文章
- PHP 中 call_user_func 函数 和 call_user_func_array 函数的区别
PHP 中 call_user_func() 函数 和 call_user_func_array() 函数都是回调函数,在写接口的时候经常会用到,但是他们有什么区别呢? 它们的第一个参数都是被调用的回 ...
- php中call_user_func 与 call_user_func_array的使用
call_user_func()是利用回调函数处理字符串,call_user_func_array是利用回调函数处理数组. // 1. 调用自定义函数 function test($a, $b) { ...
- php中call_user_func()与call_user_func_array()区别
call_user_func:把一个参数作为回调函数调用 用法说明: call_user_func ( callable $callback [, mixed $parameter [, mixed ...
- MFC中GetPrivateProfileString相关函数
项目中用到了这个函数,所以了解了一下,参考了一些博客: http://blog.sina.com.cn/s/blog_a599b5960101tsbk.html http://blog.csdn.ne ...
- PHP中url相关函数
1,string urlencode(string $str)/string urldecode(string $str) urlencode将中文以及特殊字符转化为16进制,然后在每个字符前面加%: ...
- OpenCV中Denoising相关函数的简单介绍
参考:http://wenhuix.github.io/research/denoise.html一.基本情况 (一)基本方法 Fast Non-Local Me ...
- STL中heap相关函数
heap并不是属于STL中的containers,而是在<algorithm>下提供了相关的函数 make_heap,sort_heap,pop_heap,push_heap 函数的说明: ...
- PHP 中 call_user_func 的使用
call_user_func函数类似于一种特别的调用函数的方法,使用方法如下 第一种情况: function set_max($a,$b) { if($a>$b) echo $a; else e ...
- 【面试】C++类中的相关函数【构造,拷贝构造,析构,友元】
构造函数:值的初始化,可带参数,无返回值,可重载,可存在多个 析构函数:释放对象内存空间,无参数,无返回值,不可重载,只能存在一个 拷贝构造函数:拷贝对象,其形参必须是引用 1.空类会默认添加哪些东西 ...
随机推荐
- 【[NOI2011]阿狸的打字机】
首先发现这个插入的非常有特点,我们可以直接利用这个特殊的性质在\(Trie\)树上模拟指针的进退 之后得到了\(Trie\)树,先无脑建出\(AC\)机 之后考虑一下如何写暴力 最简单的暴力对于每一个 ...
- burpsuit常用功能
1.生成GET数据包:复制url -> 打开burp -> repeater -> 右键paste url as request 2.生成POST数据包:生成一个GET数据包 -&g ...
- Dubbo实践(七)扩展点
与JDK的SPI机制类似,Dubbo也在META-INF路径下定义了多种扩展接口.只是JDK SPI机制是Java后台帮你实现读取文件并对接具体的实现类,而Dubbo是自己去读文件. 扩展点配置 扩展 ...
- [Luogu2622]关灯问题$||$(状压$DP$)
#\(\color{red}{\mathcal{Description}}\) \(Link\) 现有\(n\)盏灯,以及\(m\)个按钮.每个按钮可以同时控制这\(n\)盏灯--按下了第i个按钮,对 ...
- Linux Shell常用技巧(十)
二十. 通过管道组合Shell命令获取系统运行数据: 1. 输出当前系统中占用内存最多的5条命令: #1) 通过ps命令列出当前主机正在运行的所有进程. #2) 按照第五个字段基于数值 ...
- FCC Truncate a string 解决方法
三行搞定 function truncate(str, num) { ab = str.length >num?num>3?str.slice(0,num-3)+ "...&qu ...
- Ubuntu16.04 解决matplotlib乱码或者中文显示不了的问题(可用)
一. 下载字体 SimHei.ttf 复制到linux字体库中 sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf 二.查看matplotlib配置 In ...
- Ajax数据获取(未完待续。。。)
@:网站内容通过Ajax获取数据然后重新渲染产生 这种时候我们如何拿到自己想要的数据: 1:打开检查,在network选项中查看浏览器发送了哪些请求.(清空,再刷新,得到新的请求) 在截图的左下角可以 ...
- Node.js http.createServer 简单服务配置
基本实现: var http = require("http"); var server = http.createServer(function (req, res) { if ...
- 2.Hadoop集群安装进阶
Hadoop进阶 1.配置SSH免密 (1)修改slaves文件 切换到master机器,本节操作全在master进行. 进入/usr/hadoop/etc/hadoop目录下,找到slaves文件, ...