转载

PHP Callback 回调类型

自 PHP 5.4 起可用 callable 类型指定回调类型 callback。本文档基于同样理由使用 callback 类型信息。

传递

一个 PHP 的函数以 string 类型传递其名称。可以使用任何内置或用户自定义函数,但除了语言结构例如:array()echoempty()eval()exit()isset()list()printunset()

一个已实例化的对象的方法被作为数组传递,下标 0 包含该对象,下标 1 包含方法名。

静态类方法也可不经实例化该类的对象而传递,只要在下标 0 中包含类名而不是对象。自 PHP 5.2.3 起,也可以传递 'ClassName::methodName'

除了普通的用户自定义函数外,create_function() 可以用来创建一个匿名回调函数。自 PHP 5.3.0 起也可传递 closure 给回调参数。

Example #1 回调函数示例

  1. <?php  
  2.  
  3. // An example callback function 
  4. function my_callback_function() { 
  5.     echo 'hello world!'
  6.  
  7. // An example callback method 
  8. class MyClass { 
  9.     static function myCallbackMethod() { 
  10.         echo 'Hello World!'
  11.     } 
  12.  
  13. // Type 1: Simple callback 
  14. call_user_func('my_callback_function');  
  15.  
  16. // Type 2: Static class method call 
  17. call_user_func(array('MyClass''myCallbackMethod'));  
  18.  
  19. // Type 3: Object method call 
  20. $obj = new MyClass(); 
  21. call_user_func(array($obj'myCallbackMethod')); 
  22.  
  23. // Type 4: Static class method call (As of PHP 5.2.3) 
  24. call_user_func('MyClass::myCallbackMethod'); 
  25.  
  26. // Type 5: Relative static class method call (As of PHP 5.3.0) 
  27. class A { 
  28.     public static function who() { 
  29.         echo "A/n"
  30.     } 
  31.  
  32. class B extends A { 
  33.     public static function who() { 
  34.         echo "B/n"
  35.     } 
  36.  
  37. call_user_func(array('B''parent::who')); // A 
  38. ?> 
一些函数如 call_user_func()usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。
正文到此结束
Loading...