php private vars questions ...(可通过var_dump访问)?

时间:2011-09-20 04:48:51

标签: php class

无论如何都要阻止var_dump在类中打印私有变量?我得到了DBPASS的私有变量,使用

时肯定不会打印出来
var_dump($this->db);

作为

["db_host:private"]=> string(9) "localhost" ...user, pass, etc ...

4 个答案:

答案 0 :(得分:5)

  

无论如何都要阻止var_dump在类中打印私有变量?

不,你不能。请注意,私有变量用于隐藏密码 - 至少不是您所暗示的意义。可以说,他们可以为所有公众服务,如果这是您所关注的问题,它对您的应用程序的安全性几乎没有什么影响。

  

我收到了DBPASS的私有var,使用var_dump时肯定不会打印

您可以完全控制var_dump()的使用位置,但它不会像魔术般弹出来向最终用户显示您的密码。无论如何,你真的不应该在生产环境中拥有任何类型的调试代码。

答案 1 :(得分:1)

没有

将$对象作为你班级的一个实例,如果你想

   var_dump($object->db) 

致命错误:无法访问私有财产,但您可以

   var_dump($object)

没有错误,显示了明智的数据。

您可以使用双向密码算法来存储密码和decypher以便使用它。

mcrypt可以帮到你。

答案 2 :(得分:0)

您无法隐藏对象中的任何内容。 private修饰符的思想是阻止调用函数改变对象的内部状态,而不是隐藏世界中的值。

我做了一个简单的测试

class A {
    private $num1 = 10;
    public $num2 = 20;
    function __toString(){
        return "My class is secret\n";
    }
    function __get($param){
        echo "__get is called with param = $param\n";
    }
}

$a = new A;

echo $a;
var_dump($a);

结果如下:

My class is secret
object(A)#1 (2) {
  ["num1":"A":private]=>
  int(10)
  ["num2"]=>
  int(20)
}

因此__toString执行时,__getvar_dump都不会被调用。

答案 3 :(得分:0)

您可以围绕var_dump创建自己的包装函数,该函数获取原始var_dump的结果,并在任何看起来像[xxxx:yyyy:private]=>的空格后用空行替换该行。< / p>