Code analysis of the callback function in php
1. The concept of callback function
Let’s first look at the callback function in C language: the 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 mechanism of callback functions in various languages is different. Generally speaking, the callback function is a function that we define, but we do not directly Instead of calling it through another function, this function calls the callback function by receiving its name and parameters.
2. The callback function in
PHP provides two built-in functions call_user_func() and call_user_func_array() 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 see it by looking at its prototype: mixed call_user_func_array (callable $callback, array$param_arr ), It has only two parameters; while the number of parameters of call_user_func($callback, parameter 1, parameter 2,...) is determined based on the parameters of the callback function.
3. Implementation of the callback function
How to implement global functions in the script, non-static methods that do not use $this in the class, and non-static methods that use $this in the class As for static methods (need to pass in objects) and callbacks of 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'));
PHP Tutorial"
The above is the detailed content of Code analysis of callback functions in php. For more information, please follow other related articles on the PHP Chinese website!