Ну хз, ну попробую пересказать, что понял:
вот начало понимания - Анонимные функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определенных имен. То есть в переменную записана функция и при вызове переменной срабатывает, собственно функция.
Правда, если нам нужна какая либо переменная в функции, вот так в функцию она не попадает
$message = 'hello';
$example = function () {
var_dump($message);
};
echo $example();
нужно вот так:
$example = function () use ($message) {
var_dump($message);
};
echo $example();
но дальше, если мы изменим где-то в скрипте переменную, после записи "клюшки" (ну для упрощения так назвал -) ), то хрен она изменится в самой клюшке. Разве что записать переменную "по ссылке" в саму "клюшку" (вроде так это называется)(но имхо, - это и есть самая фишка механизма).
это все как бы функционерно выглядит . Но вот это - " PHP автоматически преобразует такие выражения в экземпляры внутреннего класса Closure ". И потом простой пример:
class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
который понятно как работает, но из которого, пока не ясно, зачем так все переверчивать. Там ниже пример по сложнее, но мне бы этот сначала осмыслить.
такое вот первое мнение об этом.