Php 打印显示私有变量。为什么?

Php 打印显示私有变量。为什么?,php,class,echo,private,Php,Class,Echo,Private,为什么print\r即使其作用域设置为private,也能看到私有属性$version class-myClass{ 私人版$元; 公共函数集\u版本($value){ $this->version=$value; } } $class=新的myClass(); $class->set_版本(“1.2”); 回声“; 打印(类); 出于调试目的显示私有成员属性。它不应用于输出用于显示目的的对象(例如,在视图/页面中)。要显示有关对象的信息,可能需要创建一个方法(例如toString),该方法将返

为什么
print\r
即使其作用域设置为private,也能看到私有属性$version

class-myClass{
私人版$元;
公共函数集\u版本($value){
$this->version=$value;
}
}
$class=新的myClass();
$class->set_版本(“1.2”);
回声“;
打印(类);
出于调试目的显示私有成员属性。它不应用于输出用于显示目的的对象(例如,在视图/页面中)。要显示有关对象的信息,可能需要创建一个方法(例如toString),该方法将返回适当的信息

print\u r(),还将显示对象的受保护和私有属性。静态类成员将不会显示



一,http://php.net/manual/en/function.print-r.php#refsect1-function.print-r-description

此外,从PHP5.6.0开始,您可以使用它来覆盖或细化
print\r()
var\u dump()
输出

例如,使用json编码和解码,您只能返回公共属性

myClass Object
(
    [public_var] => Foobar
)

private
对象属性主要在类继承的上下文中,仅在内部作用域中。不要假定
private
表示“安全”。它只是这个属性应该如何使用的一个指示器,它不提供任何实际的“安全性”或事实上的“真正隐私”。@deceze Private意味着它只在特定类中,可以读取和更新var或函数的值。这就是为什么我想知道为什么印刷品仍然可以看到它为什么不是静态类?谢谢“好的,@TheCrazyProfessor这是一个好问题。@TheCrazyProfessor我想这是一个内部存储的东西。。。e、 可能PHP将静态变量和类定义存储在一个对象中,然后该类的实例存储在一个单独的对象中。。。如果您真的想要这些,您可以使用(有关更多信息,请参阅)
<?php
class myClass {

    private $private_var;

    public $public_var = 'Foobar';

    public function setPrivate($value)
    {
        $this->private_var = $value;
    }

    public function __debugInfo()
    {
        return json_decode(json_encode($this), true);
    }
}

$class = new myClass();
$class->setPrivate("Baz");

print_r($class);
myClass Object
(
    [public_var] => Foobar
)