无论如何都要阻止var_dump在类中打印私有变量?我得到了DBPASS的私有变量,使用
时肯定不会打印出来var_dump($this->db);
作为
["db_host:private"]=> string(9) "localhost" ...user, pass, etc ...
答案 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
执行时,__get
和var_dump
都不会被调用。
答案 3 :(得分:0)
您可以围绕var_dump
创建自己的包装函数,该函数获取原始var_dump
的结果,并在任何看起来像[xxxx:yyyy:private]=>
的空格后用空行替换该行。< / p>