call_user_func 把第一个参数作为回调函数调用
发表日期:2021-07-01 08:57:16 | 来源: | | 浏览(960) 分类:函数处理 函数
call_user_func
(PHP 4, PHP 5, PHP 7, PHP 8)
call_user_func — 把第一个参数作为回调函数调用
说明
call_user_func(callable
$callback
, mixed $parameter
= ?, mixed $...
= ?): mixed
第一个参数 callback
是被调用的回调函数,其余参数是回调函数的参数。
参数
-
callback
-
将被调用的回调函数(callable)。
-
parameter
-
0个或以上的参数,被传入回调函数。
注意:
请注意,传入call_user_func()的参数不能为引用传递。
示例 #1 call_user_func() 的参考例子
<?php error_reporting(E_ALL); function increment(&$var){ $var++; } $a = 0; call_user_func('increment', $a); echo $a."\n"; call_user_func_array('increment', array(&$a)); // You can use this instead before PHP 5.3echo $a."\n"; ?>
以上例程会输出:
0 1
返回值
返回回调函数的返回值。
更新日志
版本 | 说明 |
---|---|
5.3.0 |
对面向对象里面的关键字的解析有所增强。在此之前,使用两个冒号来连接一个类和里面的一个方法,把它作为参数来作为回调函数的话,将会发出一个E_STRICT 的警告,因为这个传入的参数被视为静态方法。
|
范例
示例 #2 call_user_func() 的例子
<?php function barber($type){ echo "You wanted a $type haircut, no problem\n"; } call_user_func('barber', "mushroom"); call_user_func('barber', "shave"); ?>
以上例程会输出:
You wanted a mushroom haircut, no problem You wanted a shave haircut, no problem
示例 #3 call_user_func() 命名空间的使用
<?php namespace Foobar; class Foo { static public function test() { print "Hello world!\n"; } } call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // As of PHP 5.3.0?>
以上例程会输出:
Hello world! Hello world!
示例 #4 用call_user_func()来调用一个类里面的方法
<?php class myclass { static function say_hello() { echo "Hello!\n"; } } $classname = "myclass"; call_user_func(array($classname, 'say_hello')); call_user_func($classname .'::say_hello'); // As of 5.2.3$myobject = new myclass(); call_user_func(array($myobject, 'say_hello')); ?>
以上例程会输出:
Hello! Hello! Hello!
示例 #5 把完整的函数作为回调传入call_user_func()
<?php call_user_func(function($arg) { print "[$arg]\n"; } , 'test'); /* As of PHP 5.3.0 */ ?>
以上例程会输出:
[test]
注释
注意:
在函数中注册有多个回调内容时(如使用 call_user_func() 与 call_user_func_array()),如在前一个回调中有未捕获的异常,其后的将不再被调用。
参见
- call_user_func_array() - 调用回调函数,并把一个数组参数作为回调函数的参数
- is_callable() - 检测参数是否为合法的可调用结构
- ReflectionFunction::invoke() - Invokes function
- ReflectionMethod::invoke() - Invoke
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- call_user_func_array 调用回调函数,并把一个数组参数作为回调函数的参数(0)
- call_user_func 把第一个参数作为回调函数调用(0)
- create_function Create an anonymous (lambda-style) function(0)
- forward_static_call_array Call a static method and pass the arguments as array(0)
- forward_static_call Call a static method(0)
- func_get_arg 返回参数列表的某一项(0)
- func_get_args 返回一个包含函数参数列表的数组(0)
- func_num_args Returns the number of arguments passed to the function(0)
- function_exists 如果给定的函数已经被定义就返回 true(0)
- get_defined_functions 返回所有已定义函数的数组(0)
- register_shutdown_function 注册一个会在php中止时执行的函数(0)
- register_tick_function Register a function for execution on each tick(0)
- unregister_tick_function De-register a function for execution on each tick(0)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)