2016-09-22 51 views
0

我有一个类有一个变量的用户:private $ uPass;PHP OOP - 使用var_dump从外部类访问私有变量?

我刚刚注意到,当创建一个用户实例,我在该实例上运行一个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方法,或者不要担心。如果某人有权访问您的源代码或者该对象的序列化副本,这只是一种安全风险,而这两者都可能表明存在更广泛的安全问题。