Зачем использовать стрелочные функции
В PHP есть возможность сокращать запись функций, что экономит время разработки и упрощает чтение кода.
Стрелочные функции появились в PHP 7.4 и отлично подходят для коротких одноразовых операций.
Пример на WordPress Hooks
Допустим, нам нужно добавить новую секцию в фильтре WooCommerce.
Обычный (и довольно громоздкий) код может выглядеть так:
add_filter('woocommerce_get_sections_iiko', 'add_section', 10, 1);
function add_section($sections) {
$sections = array_merge($sections, ['bonuses' => __('Bonuses', 'iiko')]);
return $sections;
}
Этот код просто добавляет в массив $sections новый элемент bonuses и возвращает обновлённый массив.
Для такой простой задачи запись из 5 строк выглядит избыточно.
1. Анонимные функции
Первое упрощение — убрать имя функции. Если функция используется только в одном месте, нет смысла выносить её в отдельное объявление.
add_filter('woocommerce_get_sections_iiko', function ($sections) {
return array_merge($sections, ['bonuses' => __('Bonuses', 'iiko')]);
});
Мы убрали лишнюю переменную и аргументы по умолчанию — код стал компактнее.
2. Стрелочные функции
Стрелочные функции имеют следующий синтаксис:
fn(список_параметров) => выражение;
Главное отличие — они предназначены для возврата одного выражения без return.
Тот же пример со стрелочной функцией:
add_filter(
'woocommerce_get_sections_iiko',
fn($sections) => array_merge($sections, ['bonuses' => __('Bonuses', 'iiko')])
);
Теперь задача решается в одной строке, при этом читаемость кода не страдает.
3. Замыкания и внешние переменные
Иногда нужно использовать переменные, определённые снаружи функции.
В анонимных функциях это делается через конструкцию use.
Пример с обычной анонимной функцией:
$new_section = ['bonuses' => __('Bonuses', 'iiko')];
add_filter('woocommerce_get_sections_iiko', function ($sections) use ($new_section) {
return array_merge($sections, $new_section);
});
В стрелочных функциях переменные из внешней области видимости подхватываются автоматически (по значению):
$new_section = ['bonuses' => __('Bonuses', 'iiko')];
add_filter(
'woocommerce_get_sections_iiko',
fn($sections) => array_merge($sections, $new_section)
);
Важные нюансы
- Стрелочные функции всегда возвращают результат выражения (аналог
returnвнутри обычной функции). - В них нельзя писать многострочный код — только одно выражение.
- Внешние переменные передаются по значению, то есть изменить их внутри функции нельзя.
- Если нужна передача по ссылке — используйте обычные анонимные функции с
use (&$var).
Итог
- Было: 5 строк с именованной функцией.
- Стало: 1 строка со стрелочной функцией.
- Код стал короче, проще и не потерял читаемости.
Используйте стрелочные функции, когда нужно быстро описать простое преобразование данных, особенно в колбэках (array_map, array_filter, хуки WordPress и т.п.).