Home >Backend Development >PHP Tutorial >Code analysis of callback functions in php

Code analysis of callback functions in php

烟雨青岚
烟雨青岚forward
2020-06-09 13:24:332307browse

Code analysis of callback functions in php

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__.&#39;exec,the args is:&#39;.$arg1.&#39; &#39;.$arg2;  
            echo "<br/>";  
        }  
          
        //通过call_user_func调用函数f1  
        call_user_func(&#39;f1&#39;,&#39;han&#39;,&#39;wen&#39;);  
      
            //通过call_user_func_array调用函数  
        call_user_func_array(&#39;f1&#39;,array(&#39;han&#39;,&#39;wen&#39;));  
        class A  
        {  
            public $name;  
      
            function show($arg1)  
            {  
                echo &#39;the arg is:&#39;.$arg1."<br/>";  
                echo &#39;my name is:&#39;.$this->name;  
                echo "<br/>";  
            }  
            function show1($arg1,$arg2)  
            {  
                echo __METHOD__.&#39; exec,the args is:&#39;.$arg1.&#39; &#39;.$arg2."<br/>";  
            }  
            public static function show2($arg1,$arg2)  
            {  
                echo __METHOD__.&#39; of class A exec, the args is:&#39;.$arg1.&#39; &#39;.$arg2."<br/>";  
            }  
      
        }  
        //调用类中非静态成员函数,该成员函数中有$this调用了对象中的成员  
        $a = new A;  
        $a->name = &#39;wen&#39;;         
        call_user_func_array(array($a,&#39;show&#39;,),array(&#39;han!&#39;));
        
        //调用类中非静态成员函数,没有对象被创建,该成员函数中不能有$this
        call_user_func_array(array(&#39;A&#39;,&#39;show1&#39;,),array(&#39;han!&#39;,&#39;wen&#39;));  
 
        //调用类中静态成员函数
        call_user_func_array(array(&#39;A&#39;,&#39;show2&#39;),array(&#39;argument1&#39;,&#39;argument2&#39;));

Thank you everyone for reading, I hope you will benefit a lot.

This article is reproduced from: https://blog.csdn.net/u010544319/article/details/9186323

Recommended tutorial: "

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!

Statement:
This article is reproduced at:csdn.net. If there is any infringement, please contact admin@php.cn delete