Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
callback функция
Некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также и методами объектов, включая статические методы классов.
PHP-функция передается просто как строка ее имени. Можно использовать любую встроенную или пользовательскую функцию, кроме языковых конструкций, таких как: array(), echo(), empty(), eval(), exit(), isset(), list(), print() и unset().
Метод созданного объекта передается как массив, содержащий сам объект в элементе с индексом 0 и имя метода в элементе с индексом 1.
Статические методы классов также могут быть переданы без создания экземпляра объекта данного класса путем передачи имени класса вместо имени объекта в элементе с индексом 0.
Кроме общих пользовательских функций, create_function() также может быть использована для создания анонимной callback-функции. Начиная с версии PHP 5.3.0 стала возможным также передача замыканий в callback-параметр.
Пример #1 Примеры callback-функций
// пример callback-функции
function my_callback_function() {
echo 'hello world!';
}
// пример callback-метода
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Вариант 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 Пример callback-вызова с использованием замыканий
// наше замыкание
$double = function($a) {
return $a * 2;
};
// это наш диапазон чисел
$numbers = range(1, 5);
// Используем здесь замыкание в качестве callback-функции
// для удвоения размера каждого элемента в диапазоне
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
Результат выполнения данного примера:
Замечание: В PHP 4 было необходимо использовать ссылку при создании callback-функции для того, чтобы она указывала на реальный объект, а не на его копию. За подробностями обращайтесь к разделу Объяснение ссылок.
Замечание: Callback-функции, зарегистрированные такими функциями как call_user_func() и call_user_func_array(), не будут вызваны при наличии не пойманного исключения, брошенного в предыдущей callback-функции.
Смотрите также:
Описание на ru2.php.net
Описание на php.ru