2016-09-22 10 views
0

У меня есть класс Пользователь с переменной: private $ uPass;PHP OOP - приватная переменная, доступная из внешнего класса с var_dump?

Я только заметил, что при создании экземпляра User и я запускаю var_dump на этом экземпляре, который просто перечисляет все частные переменные? Есть ли способ отключить это?

class User 
{ 
    private $uId; 
    private $uName; 
    private $uPass; 
    private $uPowers; 

$teamMembers[$count] = new User(); 

foreach ($teamMembers as $teamMember) 
{ 
    var_dump($teamMember); 
} 

И тогда выход только показывает все, в том числе пароли ... Ofcourse они зашифрованы, но до сих пор не хотят, чтобы они были доступны, как это !?

Каков правильный способ решить эту проблему?

+2

var_dump() не совпадает с доступом к частным переменным. Они все еще недоступны для вашего кода. Просто для вашего класса, инструментов отладки и отражения. –

+0

Если var_dump является проблемой для вас, проверьте [ReflectionClass] (http://stackoverflow.com/questions/11604946/can-i-get-the-value-of-a-private-property-with-reflection) тоже Вы не можете «скрыть» значение от них, например, вы не можете скрыть его из ваших инструментов базы данных. Вы можете избежать заполнения значения в PHP и только протестировать его в БД. – Gectou4

ответ

2

Это точно делает то, что он говорит, что это делает:

Все государственные, частные и защищенные свойства объектов будут возвращены на выходе, если объект не реализует метод __debugInfo() (реализованный в PHP 5.6.0).

Таким образом, вы можете реализовать пользовательский метод __debugInfo или, альтернативно, просто перестать беспокоиться об этом. Это только риск для безопасности, если у кого-то есть доступ к вашему исходному коду или сериализованная копия объекта, оба из которых, вероятно, являются признаками более широкой проблемы безопасности.

 Смежные вопросы

  • Нет связанных вопросов^_^