PHP打印和静态成员

PHP打印和静态成员,php,static,visibility,Php,Static,Visibility,我得到了一个DB对象的实例,它被传递给会话对象,因为会话对象有几个方法可以使用DB对象来执行SQL语句,我计划将这个DB对象存储在会话对象属性中 通过测试,我发现print\r暴露了会话对象属性中存储的DB对象;输出中包括db用户/密码 因此,我的想法是将DB对象存储在私有静态成员中,以防止在会话对象上调用print\r时泄露此信息 这是可以接受的,还是仅仅是静态成员的错误使用 在print\r期间,建议采用什么方法防止私有对象属性被泄露 下面是代码示例 之前: class Session {

我得到了一个DB对象的实例,它被传递给会话对象,因为会话对象有几个方法可以使用DB对象来执行SQL语句,我计划将这个DB对象存储在会话对象属性中

通过测试,我发现
print\r
暴露了会话对象属性中存储的DB对象;输出中包括db用户/密码

因此,我的想法是将DB对象存储在私有静态成员中,以防止在会话对象上调用
print\r
时泄露此信息

这是可以接受的,还是仅仅是静态成员的错误使用

print\r
期间,建议采用什么方法防止私有对象属性被泄露

下面是代码示例

之前:

class Session 
{

    public __construct(DB $db)
    {
        $this->db = $db;
    }

}
class Session
{

    private static $db;

    pubic __construct(DB $db)
    {
        self::$db = $db;
    }

}
之后:

class Session 
{

    public __construct(DB $db)
    {
        $this->db = $db;
    }

}
class Session
{

    private static $db;

    pubic __construct(DB $db)
    {
        self::$db = $db;
    }

}
是的,这很糟糕

print\r()
应仅用于调试,而不用于向用户显示内容


如果该类包含对测试人员不可见的秘密信息,则必须对机密的部分进行清理(设置字段为空字符串或某物)。

< P>不能阻止PrrtTrr/ValueDopp/ValueExcel从中读取这些信息,它已经向PHP团队报告了好几次,但他们认为它是一个特性(…):


如果您使用示例中的静态成员,请记住每个会话实例都可以访问它/具有相同的属性;这可能会在以后带来一些惊喜


另一种方法是在连接DB对象后删除登录/传递,这有助于解决问题。

另一种方法是修改使用DB对象的方式。如果会话方法需要使用DB对象,他们应该在方法开始时调用“global$DB;”,以确保敏感的DB登录信息实际上不是持久数据的$_会话对象的一部分,并且由调用页面定义适当的$DB对象,并且在脚本执行期间不公开它,不用担心它挂在会话对象中。

您链接的错误报告似乎是指私有变量,而不是私有静态变量。我认为静态变量无法从print\r/var\u dump/var\u导出访问。