Есть ли волшебный метод, чтобы запретить var_export вытащить приватные поля класса?
Составляю задачу на Codewars, в которой необходимо передавать в пользовательскую функцию объект с методами и секретными полями, но пользователь может считерить и сдампить его, прочитав содержимое полей. Волшебными методами __sleep и __debugInfo можно запретить вытянуть эти поля через serialize и var_dump, но остаётся var_export, для которого волшебного метода не нашёл. Гугл ничего не подсказывает по этому поводу.
Дополнительно:
Не хранить переменные в виде мембера класса, а хранить как static внутри метода
- О, отличная мысль! Как-то вроде того, или можно упростить?
private function secret(?int $value = null) { static $secret; if (is_null($value)) return $secret; else $secret = $value; }
private function secret(?int $value = null) { static $secret; if (is_null($value)) return $secret; else $secret = $value; }
- Да, только присвой что-нибудь $secret при инициализации.
И засовывай туда не скалярный тип а объект, чтобы он по ссылке возвращался
Добраться до статичных локальных переменах функций можно только отладчиком
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы запретить функции var_export() выводить приватные поля класса, можно воспользоваться магическим методом __debugInfo(). Этот метод позволяет определить, какие свойства класса должны быть возвращены при вызове функции var_export().
Пример:
class MyClass { private $privateProperty = 'private value'; public $publicProperty = 'public value'; public function __debugInfo() { return [ 'publicProperty' => $this->publicProperty ]; } } $obj = new MyClass(); var_export($obj);
В этом примере мы определяем метод __debugInfo() в классе MyClass и возвращаем массив только с публичным свойством publicProperty. Теперь при вызове функции var_export() будет выведено только это свойство, а приватное свойство privateProperty будет скрыто.
Таким образом, использование магического метода __debugInfo() позволяет контролировать вывод приватных полей класса при использовании функции var_export().