PHP. Как определить определить и использовать анонимную функцию в параметре?


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 является функцией — мы выполняем ее и возвращаем результат выполнения. В противном случае возвращаем само значение переменной.


Добавить комментарий

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