Функции обратного вызова в PHP
Функция обратного вызова — это функция, которая передается в качестве аргумента в другую функцию.
Функция обратного вызова может быть:
- Именованная функция — передается имя функции в виде строки
- Анонимная функция — определяется непосредственно в месте вызова и передается как аргумент
Использование именованной функции в качестве обратного вызова
Любая существующая функция может быть использована в качестве функции обратного вызова. Чтобы использовать именованную функцию в качестве обратного вызова, передайте строку, содержащую имя функции, в качестве аргумента другой функции:
Пример
Передаем функцию обратного вызова в функцию PHP
array_map(), чтобы умножить каждое число само на себя для каждого числа в массиве:
<?php
// Определяем именованную функцию обратного вызова
function myfunction($n) {
return($n * $n);
}
// Массив чисел для умножения
$numbers = [1,
2, 3, 4, 5];
// Используем array_map с функцией myfunction в качестве обратного вызова
print_r(array_map("myfunction", $numbers));
?>
Попробуйте сами »
Использование анонимной функции в качестве обратного вызова
Анонимная функция определяется непосредственно в месте вызова и чаще всего используется, когда требуется одноразовая функция.
Здесь мы передаем анонимную функцию в качестве функции обратного вызова:
Пример
Используем анонимную функцию в качестве обратного вызова для функции PHP
array_map():
<?php
$numbers = [1, 2, 3, 4, 5];
$res = array_map(function($n)
{return($n * $n);}, $numbers);
print_r($res);
?>
Попробуйте сами »
Функции обратного вызова в пользовательских функциях PHP
Пользовательские функции и методы также могут принимать функции обратного вызова в качестве аргументов. Чтобы использовать функцию обратного вызова внутри пользовательской функции или метода, вызовите ее, добавив круглые скобки к переменной, и передайте аргументы, как с обычными функциями:
Пример
Выполнение обратного вызова из пользовательской функции:
<?php
function exclaim($str) {
return $str . "! ";
}
function ask($str) {
return $str . "? ";
}
function
printFormatted($str, $format) {
echo $format($str);
}
// Передаем "exclaim" и "ask" в качестве функций обратного вызова в printFormatted()
printFormatted("Привет мир", "exclaim");
printFormatted("Привет мир", "ask");
?>
Попробуйте сами »