1. The concept of callback function
Let’s first look at the callback function in C language: a callback function is a function called through a function pointer. If you pass a function pointer (address) as a parameter to another function, and when this pointer is used to call the function it points to, we say it is a callback function. The callback function is not called directly by the implementer of the function, but is called by another party when a specific event or condition occurs to respond to the event or condition.
The concept of callback functions in other languages is similar, but the implementation mechanisms of callback functions in various languages are different. Generally speaking, the callback function is a function we define, but we do not call it directly, but through To call another function, this function calls the callback function by receiving its name and parameters.
2. Implementation of callback function in php
PHP provides two built-in functions call_user_func()
and call_user_func_array()
to provide support for callback functions. The difference between these two functions is that call_user_func_array receives the parameters of the callback function in the form of an array. You can tell by looking at its prototype: mixed call_user_func_array (callable $callback, array$param_arr), it has only two parameters. The number of call_user_func($callback, parameter 1, parameter 2,...) is determined based on the parameters of the callback function.
How to implement callbacks to global functions in scripts, non-static methods that do not use $this in classes, non-static methods that use $this in classes (need to pass in objects), and static methods in classes. The following is the code that passed the test.
<?php //普通函数 function f1($arg1,$arg2) { echo __FUNCTION__.'exec,the args is:'.$arg1.' '.$arg2; echo "<br/>"; } //通过call_user_func调用函数f1 call_user_func('f1','han','wen'); //通过call_user_func_array调用函数 call_user_func_array('f1',array('han','wen')); class A { public $name; function show($arg1) { echo 'the arg is:'.$arg1."<br/>"; echo 'my name is:'.$this->name; echo "<br/>"; } function show1($arg1,$arg2) { echo __METHOD__.' exec,the args is:'.$arg1.' '.$arg2."<br/>"; } public static function show2($arg1,$arg2) { echo __METHOD__.' of class A exec, the args is:'.$arg1.' '.$arg2."<br/>"; } } //调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员 $a = new A; $a->name = 'wen'; call_user_func_array(array($a,'show',),array('han!')); //调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this call_user_func_array(array('A','show1',),array('han!','wen')); //调用类中静态成员函数 call_user_func_array(array('A','show2'),array('argument1','argument2'));
Running results:
f1exec,the args is:han wen f1exec,the args is:han wen the arg is:han! my name is:wen A::show1 exec,the args is:han! wen A::show2 of class A exec, the args is:argument1 argument2
Related recommendations:
The meaning of javascript callback function
Examples of callback function usage
Detailed explanation of the usage of php callback functions and anonymous functions
The above is the detailed content of PHP callback function concept and usage. For more information, please follow other related articles on the PHP Chinese website!