Как получить доступ к private свойствам снаружи?

Ответ
class Secret {
    private string $password = 'hidden';
}

// Через Reflection API
$obj = new Secret();
$ref = new ReflectionClass($obj);
$prop = $ref->getProperty('password');
$prop->setAccessible(true); // PHP < 8.1 требовался
echo $prop->getValue($obj); // "hidden"

// С PHP 8.1 setAccessible() не нужен
$prop = (new ReflectionClass($obj))->getProperty('password');
echo $prop->getValue($obj); // "hidden"

// Через Closure::bind (хитрый способ)
$getter = Closure::bind(fn() => $this->password, $obj, Secret::class);
echo $getter(); // "hidden"

Reflection используется в DI-контейнерах, ORM, сериализаторах, тестовых фреймворках.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.