Home > Article > Backend Development > php callback type (callback)
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.