Починаючи з PHP 5.4, зворотні виклики можуть позначатись через тип callable, що означає - придатний для виклика. В даній документації тип callback вживають з тією ж метою.
Деякі функції, наприклад, call_user_func() або usort() приймають визначені користувачем callback-функції в якості параметра. Callback-функції можуть бути не лише простими функціями, але також і методами об'єктів, включаючи статичні методи класів.
Як аргумент, функція PHP передається по імені у вигляді рядка. Будь-яка вбудована або визначена користувачем функція може передаватись таким чином, за виключенням мовних конструкцій, таких як: array(), echo, empty(), eval(), exit(), isset(), list(), print або unset().
Метод, вже створеного об'єкта, передається в масиві, де сам об'єкт має індекс 0, а його метод - індекс 1.
Також в масиві можна передавати статичний метод класа, коли в індексі 0,
замість об'єкта, йде назва класа. Починаючи з PHP 5.2.3, метод вже
можна передавати в форматі 'ClassName::methodName'
.
Окрім загальних функцій, визначених користувачем, anonymous functions (анонімні функції) також можуть передаватись в якості callback-параметрів.
Приклад #1 callback-функцій
<?php
// Приклад callback-функції
function my_callback_function() {
echo 'Привіт, Світ!';
}
// Приклад callback-метода
class MyClass {
static function myCallbackMethod() {
echo 'Привіт, Світ!';
}
}
// Тип 1: Простий callback
call_user_func('my_callback_function');
// Тип 2: Виклик статичного метода класа
call_user_func(array('MyClass', 'myCallbackMethod'));
// Тип 3: Виклик метода об'єкта
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Тип 4: Виклик статичного метода класа (Починаючи з PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Тип 5: Виклик відносного статичного метода (Починаючи з 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
?>
Приклад #2 Передача анонімної функції в якості сallback-параметра
<?php
// Наша анонімна функція
$double = function($a) {
return $a * 2;
};
// Це наш діапазон номерів
$numbers = range(1, 5);
// Використовуємо анонімну функцію як callback-параметр для
// перемноження на 2 кожного елемента в нашому діапазоні
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
Поданий вище приклад виведе:
2 4 6 8 10
Зауваження: В PHP 4, необхідно було використовувати посилання для створення callback, який вказує на актуальний об'єкт, а не на його копію. Для уточнень, прогляньте Пояснення Посилань.
Зауваження:
Зворотні виклики, зареєстровані через функції call_user_func() і call_user_func_array(), не будуть викликатись при наявності неспійманих винятків, викинутих в попередніх зворотніх викликах.