Функции обратного вызова в PHP
Функция обратного вызова (часто называемая просто "callback") — это функция, которая передается в качестве аргумента другой функции.
Функции обратного вызова
Любая существующая функция может использоваться как функция обратного вызова. Чтобы использовать функцию в качестве функции обратного вызова, передайте строку, содержащую имя функции, в качестве аргумента другой функции.
В следующем примере, чтобы вычислить длину каждой строки (в нашем случае названия брендов смартфонов) в массиве, мы передаём обратный вызов функции array_map()
:
Пример
Попробуй сам »<?php
function my_callback($item) {
return strlen($item);
}
$strings = ["Apple", "Asus", "Huawei", "Lenovo"];
$lengths = array_map("my_callback", $strings);
print_r($lengths);
?>
Начиная с седьмой версии PHP может передавать анонимные функции как функции обратного вызова. Напомним, что анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определенных имен.
В следующем примере мы используем анонимную функцию в качестве "callback" для функции array_map()
:
Пример
Попробуй сам »<?php
$strings = ["Apple", "Asus", "Huawei", "Lenovo"];
$lengths = array_map( function($item) { return strlen($item); } , $strings);
print_r($lengths);
?>
Обратные вызовы в пользовательских функциях
Пользовательские функции и методы в PHP также могут принимать функции обратного вызова bkb "callback" в качестве параметров.
Для того, чтобы внутри пользовательской функции или метода, использовать функцию обратного вызова её нужно вызвать, добавив круглые скобки к переменной и передавая аргументы, как с обычными функциями:
Пример
Попробуй сам »<?php
function exclaim($str) {
return $str . "! ";
}
function ask($str) {
return $str . "? ";
}
function printFormatted($str, $format) {
/* Вызов функции обратного вызова $format */
echo $format($str);
}
/* Передадим "exclaim" и "ask" в качестве функций обратного вызова printFormatted() */
printFormatted("Hello world", "exclaim");
printFormatted("Hello world", "ask");
?>