Вызывают в начале кода use Closure; это есть внутренний класс php Closure а далее используют внутри функции переменную $closure; из мануала совершенно не понятно как работать и применять такую переменную.
UPD
Вот так это использует во фреймворке laravel, только я не понимаю что этим пытаются добиться?
public function extend($abstract, Closure $closure)
{
$abstract = $this->normalize($abstract);
if (isset($this->instances[$abstract])) {
$this->instances[$abstract] = $closure($this->instances[$abstract], $this);
$this->rebound($abstract);
} else {
$this->extenders[$abstract][] = $closure;
}
}
Closure - это детали реализации замыкания, т.е. анонимных функций.
public function Name (Closure $closure){}
Запись утверждает, что методу должен быть передан один аргумент и этот аргумент должен являться замыканием. Т.е. в простом случае вот так:
$object->Name(function() {
// какие-то действия
});
Функцию в метод обычно передают с одной целью - чтобы этот метод был где-то вызван. А вызвать функцию можно разными методами, например:
$closure(); // вот так
call_user_func($closure); // или так
Или передать в какую-то другую функцию, которая принимает параметром callback. Можно передавать дополнительные аргументы в функцию.
Замечу, что требовать именно Closure довольно странно и оправдано только в том случае, если вы собираетесь использовать методы именно класса Closure. В общем случае для указания необходимости передать в метод функцию необходимо указывать callable, что позволяет использовать любой из вариантов передачи этого псевдотипа.
Объект класса Closure не предназначен для инстанциирования с помощью оператора new, так как имеет приватный конструктор. Это "служебный" класс PHP, который используется для создания анонимных функций.
Конструкция
public function Name (Closure $closure){}
говорит нам, что данная функция принимает в качестве параметра анонимную функцию. Вызов ее в коде будет выглядеть так:
$variable = Name(function(параметры){что-то делаем;});
Вот так это использует во фреймворке laravel, только я не понимаю что этим пытаются добиться.
public function extend($abstract, Closure $closure)
{
$abstract = $this->normalize($abstract);
if (isset($this->instances[$abstract])) {
$this->instances[$abstract] = $closure($this->instances[$abstract], $this);
$this->rebound($abstract);
} else {
$this->extenders[$abstract][] = $closure;
}
}
Продвижение своими сайтами как стратегия роста и независимости