程式碼分析php中的回撥函數

2020-07-16 10:05:56

程式碼分析php中的回撥函數

一、回撥函數的概念

先看一下C語言裡的回撥函數:回撥函數就是一個通過函數指標呼叫的函數。如果你把函數的指標(地址)作為引數傳遞給另一個函數,當這個指標被用來呼叫其所指向的函數時,我們就說這是回撥函數。回撥函數不是由該函數的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。

其他語言裡的回撥函數的概念與之相似,只不過各種語言裡回撥函數的實現機制不一樣,通俗的來說,回撥函數是一個我們定義的函數,但是不是我們直接來呼叫,而是通過另一個函數來呼叫,這個函數通過接收回撥函數的名字和引數來實現對它的呼叫。

二、php中回撥函數

php提供了兩個內建函數call_user_func()call_user_func_array()提供對回撥函數的支援。

這兩個函數的區別是call_user_func_array是以陣列的形式接收回撥函數的引數的,看它的原型就知道了:mixed call_user_func_array ( callable $callback ,array$param_arr ),它只有兩個引數;而call_user_func($callback,引數1,引數2,…)的引數個數根據回撥函數的引數來確定的

三、回撥函數的實現

如何實現對指令碼中全域性函數、類中未使用$this的非靜態方法、類中使用$this的非靜態方法(需要傳入物件)、類中靜態方法的回撥呢,下面是測試通過的程式碼。

<?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'));

感謝大家的閱讀,希望大家收益良多。

本文轉載自:https://blog.csdn.net/u010544319/article/details/9186323

推薦教學:《PHP教學

以上就是程式碼分析php中的回撥函數的詳細內容,更多請關注TW511.COM其它相關文章!