Php последних версий дает нам прекрасную возможность использовать анонимные функции при, например, передаче параметров в функцию. Таким образом можно существенно разгрузить код, не вынося функции, которые используются единоразово в отдельные, полноценные методы.
Приведу пример практического использования анонимной функции при работе с валидаторами на фреймворке Yii2.
[
// normalize "phone" input
['phone', 'filter', 'filter' => function ($value) {
// normalize phone input here
return $value;
}],
]
Пример, несмотря на свою простоту, очень показателен. Мы задаем метод, который может провести любые манипуляции с значением, осуществив его, например, фильтрацию. Данный пример идеально показывает суть анонимных функций в качестве параметров передаваемых в метод.
Но, на практике часто также появляется вопрос менее очевиден, чем само использование анонимных функций. «Как использовать переданную функцию внутри метода?».
Ответ на этот вопрос кроется в классе, на базе которого в php реализована поддержка анонимных функций — это класс Closure.
Соответственно параметр, являющийся анонимной функцией можно проверить при помощи оператора instanceof. Например:
function any( $value )
if ($value instanceof \Closure) {
return call_user_func();
} else {
return $value;
}
Этот пример показывает, как использовать анонимную функцию, переданную в качестве параметра. Если параметр $value является функцией — мы выполняем ее и возвращаем результат выполнения. В противном случае возвращаем само значение переменной.