В этом примере:
$foo = function () use (){
// ^---------^ what is the use?
}
Помимо того, что мы можем использовать функцию use ()
часть для импорта данных в функцию, как обычная функция, как в:
function bar ($foo){
}
но я не понимаю, что function ()
часть может быть использована для?
например:
$a = 1;
$foo = function ($b, $c) use ($a)
{
echo $a . PHP_EOL;
echo $b . PHP_EOL;
echo $c . PHP_EOL;
};
$foo(2, 3);
$a = 5;
$foo(7, 8);
Будет вывод:
1
2
3
1
7
8
$ b, $ c — будут параметры, которые вы передаете на исполнение.
$ а привязан / импортирован при создании. Так что если вы измените его после определения $ foo, оно не изменится.
Блок параметров предназначен для ввода параметров. Так что, если я определю
$foo = function($bar) use ($baz) {
return $bar + $baz;
}
а потом я, скажем, пройти $foo
к другой функции или привязать ее к другому классу, я могу сделать как
function bonk($bar, $foo) {
$baz = 4;
return $foo($bar);
}
а где-то еще позвони
// Returns 7
bonk(3, $foo);
Один позволяет получить переменную из контекста, в то время как другой должен быть передан. Например, у меня есть $ baz, доступный мне в классе, который определяет $ bonk, поэтому я передаю его, но я пока не знаю, что такое $ bar будет до тех пор, пока не будет вызван bonk куда-нибудь еще с $ bar
Итак, давайте представим, что я класс с именем Cats, и у меня есть объект SiameseCat, доступный для меня. У меня есть метод с именем doTheThing, который принимает функцию и параметр. Он говорит кошке, что делать и, по желанию, что делать. Так что у него всегда одна и та же кошка, но в зависимости от того, откуда я ее называю, сиамская кошка может делать разные глаголы для разных существительных, но я знаю, что это делает моя кошка, потому что именно там я определил кошку.