PHP и серверы

PHP передать функцию в функцию

📅 ⏱ 21:13 ⏳ 1 мин 💬 0

Php передать функцию в функцию: простыми словами, по шагам и с примерами. Разбираем, как это работает на практике, типичные ошибки и лучшие решения. Раскрываем

Коротко: передать функцию в функцию в PHP можно тремя способами: по имени строкой, анонимной функцией или стрелочной функцией. Параметр объявляют типом callable, а внутри вызывают принятую функцию. Часто такой приём применяют в usort, array_map и array_filter.

Кому и зачемПередача функции в функцию — основа гибкого кода: одна функция сортировки работает с любым правилом, а обработку можно менять, не переписывая её. Это называют функциями обратного вызова (callback).

Способы передать

Способ Пример
По имени 'strtoupper'
Анонимная function () { }
Стрелочная fn($x) => $x * 2
Массив-метод [$obj, 'method']

Пример

JAVASCRIPT
php
function apply(array $items, callable $fn) {
  $result = [];
  foreach ($items as $item) {
    $result[] = $fn($item);
  }
  return $result;
}

echo implode(', ', apply([1, 2, 3], fn($n) => $n * 2));
// 2, 4, 6

Функция apply() не знает, что именно делать с элементом, — это определяет переданная функция. Так одна функция решает разные задачи.

Вкладки: на практике



CODE
php
usort($users, fn($a, $b) => $a['age'] <=> $b['age']);

Здесь правило сортировки передают прямо в usort. Одна функция сортирует по любому полю — достаточно поменять callback.

CODE
php
$squares = array_map(fn($n) => $n * $n, [1, 2, 3]);
$evens   = array_filter([1, 2, 3, 4], fn($n) => $n % 2 === 0);

array_map и array_filter принимают функцию и применяют её к элементам. Это самый частый случай передачи функции в функцию.

JAVASCRIPT
php
$tax = 0.2;
$withTax = array_map(
  function ($price) use ($tax) {
    return $price * (1 + $tax);
  },
  $prices
);

Замыкание — анонимная функция, которая «запоминает» внешние переменные через use. Так в обработку передают дополнительные данные.

ВниманиеТип callable не гарантирует, что функция найдётся: если передать несуществующую функцию по имени, будет ошибка при вызове. Проверяйте через is_callable(), если данные приходят извне.

Практика: передать функцию

  1. Определите, что должна делать переданная функция.
  2. Объявите параметр с типом callable.
  3. Вызовите его внутри своей функции.
  4. Для простой логики используйте стрелочную функцию.
  5. Для внешних данных — замыкание с use.
  6. Проверьте работу на примерах.

Частые ошибки: причина → решение

Симптом Причина Решение
«Call to undefined function» неверное имя проверить is_callable
Ошибка типа аргумента передан не callable передать функцию
Нет внешней переменной забыт use добавить use ($var)
Неожиданный результат неверная логика callback проверить на примерах
Медленно на больших данных тяжёлая функция в цикле упростить или кэшировать

Проверьте себя

Чек-лист




Каким типом объявляют параметр-функцию?




Зачем в замыкании use?




Вопросы и ответы

Это функция, которую передают в другую функцию и вызывают внутри неё. Так основная функция становится универсальной, а поведение задаётся снаружи.

Стрелочная функция fn короче и автоматически захватывает внешние переменные. Она подходит для короткой логики в одну строку; для больших блоков используют обычную анонимную функцию.

Да, в виде массива [$object, 'methodName'] или строкой 'ClassName::method'. Это удобно, когда обработка уже оформлена методом.

В функциях работы с массивами: array_map, array_filter, usort, array_reduce. Также в событиях и обработчиках.

Итоги

  • Функцию в функцию передают по имени, анонимно или стрелочной.
  • Параметр объявляют типом callable.
  • Замыкание захватывает внешние переменные через use.
  • Приём широко применяют в функциях обработки массивов.
Поделиться: ВКонтакте Telegram WhatsApp Одноклассники Viber Мой Мир

Комментарии

Пока комментариев нет — будьте первым, кто поделится мнением.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получите консультацию нашего маркетолога

Изучит ваш проект, подберет подходящие услуги и тарифы

Получите бесплатный аудит

Наш специалист сделает базовый аудит вашего проекта и предложит персональные предложения.

Закажите услугу Каталог морепродуктов

Наш специалист свяжется с вами в ближайшее время и уточнит детали

Закажите адаптивный сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт лендинг

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите сайт каталог

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите интернет-магазин

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите веб-приложение

Наш специалист поможет составить Вам техническое задание на разработку сайта

Закажите тариф Аутсорс

Стоимость от 150 000 ₽

Закажите тариф Магазин

Стоимость 90 000 ₽

Закажите тариф Классический

Стоимость 60 000 ₽

Закажите тариф Эконом

Стоимость 40 000 ₽

Закажите SEO продвижение

Наш специалист свяжется с вами, проведет анализ, предложит стоимость