PHP中的回調函數


回調函數是指調用函數的時候將另一個函數作為參數傳遞到調用的函數中,而不是傳遞一個普通的變量作為參數

使用回調函數是為了可以將一段自己定義的功能傳到函數內部使用

聲明回調函數的方法

變量函數聲明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
     function  Calculate( $num ){
         for ( $i =0; $i <=10; $i ++){
             if ( $num ( $i )){
                 continue ;
             }
             echo  $i . "nbsp" ;
         }
     }
     
     function  Number_1( $a ){
         return  $a %2 == 0;  //打印不能被2整除的數
     }
     
     function  Number_2( $b ){
         return  $b  >=6;  //打印小於6的數
     }
     
     Calculate( "Number_1" );
     echo  "<br>" ;
     Calculate( "Number_2" );
?>

 執行結果

call_user_func_array()函數

該函數需要兩個參數。

第一個參數是要調用的函數名,第二個參數是數組類型,為參數列表。

參數列表的參數個數要和要調用的函數的參數個數相同

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
     function  Speak( $a , $b ){
         echo  "He can speak " . $a ;
         echo  "<br>" ;
         echo  "She can speak " . $b ;
     }
     
     function  Speak_Test(){
         return  call_user_func_array( 'Speak' , array ( 'Chinese' , 'English' ));   
     }
     
     Speak_Test()
?>

 執行結果

類靜態函數和對象

該方法回調函數也需要用到call_user_func_array()函數

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
     class  Speaking{
         static  function  Speak( $a , $b ){
             echo  "He can speak " . $a ;
             echo  "<br>" ;
             echo  "She can speak " . $b ;
             echo  "<br>" ;
         }
     }
     
     class  Writting{
         function  Write( $a , $b ){
             echo  "He can write " . $a ;
             echo  "<br>" ;
             echo  "She can write " . $b ;
         }
     }
     
     call_user_func_array( array ( "Speaking" , "Speak" ), array ( "Chinese" , "English" ));
     call_user_func_array( array ( new  Writting(), 'Write' ), array ( "German" , "Portuguese" ));
?>

 類中的方法為靜態,回調方法為

call_user_func_array(array("類名","類中的靜態方法"))

類中的方法不為靜態,回調方法為

call_user_func_array(array(對象引用,"對象中方法名"))

執行結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM