Начиная с PHP 5.4, замыкания получили методы, позволяющие контролировать анонимные функции после их создания. Нас, в первую очередь, интересует метод call, который связывает замыкание с контекстом выполнения, и вызывает его с заданными параметрами.
Итак, если у нас PHP 5.4 или выше и есть экземпляр объекта, то мы без проблем можем получить доступ к закрытым свойствам и методам, например так:
<?php
// Наш подопытный с закрытыми свойствами/методами
class Foo
{
private $test = 'TEST OK';
private function testFunc($param = '')
{
echo "Foo {$param}\n";
}
}
// Берем экземпляр объекта подопытного
$foo = new Foo();
// Создаем замыкание, которое вызовет приватный метод
// и вернет значение приватного свойства
$closure = function () {
$this->testFunc('!!!');
return $this->test;
};
// Выполняем замыкание, переопределив контекст выполнения
echo $closure->call($foo) . PHP_EOL;
Теги