Since PHP 5.4, the callable type can be used to specify the callback type callback. This document uses callback type information for the same reason.
Some functions such as call_user_func() or usort() can accept user-defined callback functions as parameters. The callback function can not only be a simple function, but also an object method, including static class methods.
Passing
A PHP function passes its name as string type. Any built-in or user-defined function can be used, except language constructs such as: array(), echo, empty(), eval(), exit(), isset(), list(), print or unset().
Methods of an instantiated object are passed as an array, with subscript 0 containing the object and subscript 1 containing the method name.
Static class methods can also be passed without instantiating an object of the class, as long as subscript 0 contains the class name instead of the object. Since PHP 5.2.3, it is also possible to pass 'ClassName::methodName'.
In addition to ordinary user-defined functions, create_function() can be used to create an anonymous callback function. Since PHP 5.3.0 it is also possible to pass closure to the callback parameter.
Example #1 Callback function example
<?php // An example callback function function my_callback_function() { echo 'hello world!'; } // An example callback method class MyClass { static function myCallbackMethod() { echo 'Hello World!'; } } // Type 1: Simple callback call_user_func('my_callback_function'); // Type 2: Static class method call call_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); // Type 4: Static class method call (As of PHP 5.2.3) call_user_func('MyClass::myCallbackMethod'); // Type 5: Relative static class method call (As of PHP 5.3.0) class A { public static function who() { echo "A\n"; } } class B extends A { public static function who() { echo "B\n"; } } call_user_func(array('B', 'parent::who')); // A ?>
Example #2 Example using Closure
<?php // Our closure $double = function($a) { return $a * 2; }; // This is our range of numbers $numbers = range(1, 5); // Use the closure as a callback here to // double the size of each element in our // range $new_numbers = array_map($double, $numbers); print implode(' ', $new_numbers); ?>
The above routine will output:
2 4 6 8 10
Note: In PHP 4, you need to use a reference to create a callback function that points to a specific object , rather than a copy. See citation for explanation.
Note:
When multiple callbacks are registered in a function (such as using call_user_func() and call_user_func_array()), if there is an uncaught exception in the previous callback, the subsequent ones will no longer be called.