В Slim Framework есть функция protect
, которая обертывает вызывающие вызовы внутри функции (т. Е. Другой вызываемой). Описание в the manual говорит:Тонкие защитные вызовы
Что делать, если вы хотите буквально сохранить закрытие в качестве необработанного значения и не вызвать его? Вы можете сделать это так:
$app->myClosure = $app->container->protect(function() {});
Глядя в исходный код, я вижу это:
/**
* Protect closure from being directly invoked
* @param Closure $callable A closure to keep from being invoked and evaluated
* @return Closure
*/
public function protect(\Closure $callable)
{
return function() use ($callable) {
return $callable;
};
}
Я задаюсь вопросом, что точка это. Здесь я сделал свой собственный тест:
$foo = function() {
echo "Hello";
};
$bar = function() use ($foo) {
return $foo;
};
var_dump($foo);
var_dump($bar);
Это то, что я получил:
object(Closure)#1 (0) {
}
object(Closure)#2 (1) {
["static"]=>
array(1) {
["foo"]=>
object(Closure)#1 (0) {
}
}
}
Я могу назвать $bar()
вернуть отозваны, но почему бы мне делать, если я могу просто использовать $foo
? Может кто-нибудь объяснить это цели?