Доступ к приватным свойствам и методам в PHP

Начиная с 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;