如何在PHP中实现回调?代码实例解释

2021年3月25日11:32:28 发表评论 1,035 次浏览

PHP中, 回调是具有类型的函数对象/引用可召回的。回调/可调用变量可以充当函数, 对象方法和静态类方法。有多种实现回调的方法。其中一些将在下面讨论:

标准回调:在PHP中, 可以使用调用函数call_user_func()函数, 其中arguments是要调用的函数的字符串名称。

例子:

<?php
  
// PHP program to illustrate working
// of a standard callback
  
// Function to print a string
function someFunction() {
     echo "lsbin \n" ;
}
  
// Standard callback
call_user_func( 'someFunction' );
?>

输出如下:

lsbin

静态类方法回调:静态类方法可以通过使用来调用call_user_func()其中parameter是一个数组, 其中包含class的字符串名称以及其中要调用的方法。

例子:

<?php
  
// PHP program to illustrate working
// of a Static class method callback
  
// Sample class
class GFG {
  
     // Function used to print a string
     static function someFunction() {
         echo "Parent lsbin \n" ;
     }
}
  
class Article extends GFG {
  
     // Function to print a string
     static function someFunction() {
         echo "lsbin Article \n" ;
     }   
}
  
// Static class method callback
call_user_func( array ( 'Article' , 'someFunction' ));
  
call_user_func( 'Article::someFunction' );
  
// Relative Static class method callback
call_user_func( array ( 'Article' , 'parent::someFunction' ));
?>

输出如下:

lsbin Article
lsbin Article
Parent lsbin

对象方法回调:可以通过使用调用对象方法call_user_func()其中arguments是一个数组, 其中包含对象变量和要调用的方法的字符串名称。如果使用__invoke()函数定义使对象方法可调用, 则也可以调用对象方法。在这种情况下, call_user_func()函数是对象变量本身。

例子:

<?php
  
// PHP program to illustrate working
// of a object method callback
  
// Sample class
class GFG {
  
     // Function to print a string
     static function someFunction() {
         echo "lsbin \n" ;
     }
  
     // Function used to print a string
     public function __invoke() {
         echo "invoke lsbin \n" ;
     }
}
  
// Class object
$obj = new GFG();
  
// Object method call
call_user_func( array ( $obj , 'someFunction' ));
  
// Callable __invoke method object 
call_user_func( $obj );
  
?>

输出如下:

lsbin
invoke lsbin

关闭回调:通过使用以下方法进行标准调用或将闭包函数映射到使用闭包函数提供的有效参数数组, 可以使闭包函数可调用array_map()函数, 其中参数是闭包函数及其有效参数的数组。

例子:

<?php
  
// PHP program to illustrate working
// of a closure callback
  
// Closure to print a string
$print_function = function ( $string ) {
     echo $string . "\n" ;
};
  
// Array of strings
$string_array = array ( "lsbin" , "GFG" , "Article" );
  
// Callable closure
array_map ( $print_function , $string_array );
  
?>

输出如下:

lsbin
GFG
Article

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: