Seit PHP 5.4 kann der Callable-Typ zur Angabe des Callback-Typs Callback verwendet werden. Aus demselben Grund werden in diesem Dokument Rückruftypinformationen verwendet.
Einige Funktionen wie call_user_func() oder usort() können benutzerdefinierte Callback-Funktionen als Parameter akzeptieren. Die Rückruffunktion kann nicht nur eine einfache Funktion sein, sondern auch eine Objektmethode, einschließlich statischer Klassenmethoden.
Übergabe
Einer PHP-Funktion wird ihr Name als String-Typ übergeben. Es kann jede integrierte oder benutzerdefinierte Funktion verwendet werden, mit Ausnahme von Sprachkonstrukten wie: array(), echo, empty(), eval(), exit(), isset(), list(), print oder unset() .
Methoden eines instanziierten Objekts werden als Array übergeben, wobei Index 0 das Objekt und Index 1 den Methodennamen enthält.
Statische Klassenmethoden können auch ohne Instanziierung eines Objekts der Klasse übergeben werden, indem der Klassenname anstelle des Objekts in den Index 0 eingefügt wird. Seit PHP 5.2.3 ist es auch möglich, „ClassName::methodName“ zu übergeben.
Zusätzlich zu gewöhnlichen benutzerdefinierten Funktionen kann create_function() verwendet werden, um eine anonyme Rückruffunktion zu erstellen. Seit PHP 5.3.0 ist es auch möglich, einen Abschluss an den Callback-Parameter zu übergeben.
Beispiel #1 Callback-Funktionsbeispiel
<?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 ?>
Beispiel #2 Beispiel für die Verwendung von 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); ?>
Die obige Routine gibt Folgendes aus:
2 4 6 8 10
Hinweis: In PHP 4 müssen Sie eine Referenz verwenden, um eine Rückruffunktion zu erstellen, die auf ein bestimmtes Objekt verweist, und nicht auf eine Kopie. Erläuterungen finden Sie im Zitat.
Hinweis:
Wenn bei der Registrierung mehrerer Rückrufinhalte in einer Funktion (z. B. bei Verwendung von call_user_func() und call_user_func_array()) eine nicht abgefangene Ausnahme im vorherigen Rückruf vorliegt, wird dies nicht mehr der Fall sein aufgerufen werden.