Ответ
В PHP стрелочные функции (arrow functions), представленные в версии 7.4, имеют несколько ключевых отличий от обычных анонимных функций.
Основные различия:
-
Захват переменных из внешней области видимости Стрелочные функции автоматически захватывают переменные из родительской области, где они определены. Для обычных функций необходимо явно использовать конструкцию
use.$multiplier = 5; // Обычная функция $funcNormal = function($n) use ($multiplier) { return $n * $multiplier; }; // Стрелочная функция $funcArrow = fn($n) => $n * $multiplier; -
Синтаксис и возврат значения Стрелочные функции имеют краткий синтаксис
fn(...) => ...и всегда возвращают результат выражения, написанного после=>. В них нельзя использовать фигурные скобки{}или операторreturn.// Обычная функция $square = function($x) { return $x * $x; }; // Стрелочная функция $square = fn($x) => $x * $x; -
Контекст
$thisСтрелочные функции не имеют собственного$this. Внутри них$thisссылается на контекст, в котором функция была определена (обычно объект класса). В обычных анонимных функциях$thisне определен, если только они не объявлены внутри метода класса. -
Ограничения Стрелочные функции предназначены для простых однострочных операций. Они не могут:
- Содержать несколько операторов.
- Использовать
yield(быть генераторами). - Изменять значения захваченных переменных (они захватываются по значению).
Когда использовать:
- Стрелочные функции: Идеальны для коротких колбэков в функциях вроде
array_map,array_filter, где нужен простой возврат значения. - Обычные функции: Необходимы для многострочной логики, побочных эффектов (например, изменение внешних переменных) или при работе с генераторами.