Php var_dump()不显示受保护和私有属性

Php var_dump()不显示受保护和私有属性,php,Php,是否有函数或如何在不显示受保护和私有属性的情况下使用var_dump()对象 例如: class foo { public $public = 'public'; protected $protected = 'protected'; private $private = 'private'; } $Foo = new foo; var_dump($Foo); // Expected output "(string) public" 如第页所示,您可以在对象上循环:

是否有函数或如何在不显示受保护和私有属性的情况下使用var_dump()对象

例如:

class foo {
    public $public = 'public';
    protected $protected = 'protected';
    private $private = 'private';
}

$Foo = new foo;
var_dump($Foo);
// Expected output "(string) public"
如第页所示,您可以在对象上循环:

<?php
    class person {
        public $FirstName = "Bill";
        public $MiddleName = "Terence";
        public $LastName = "Murphy";
        private $Password = "Poppy";
        public $Age = 29;
        public $HomeTown = "Edinburgh";
        public $FavouriteColour = "Purple";
    }

    $bill = new person();

    foreach($bill as $var => $value) {
        echo "$var is $value\n";
    }
?>

之所以这样做,是因为当您在对象外部访问该对象时,您只能访问其面向公众的成员变量。

json\u encode
将只编码公共属性。

关于
json\u decode(json\u encode($obj))
的情况如何?

一个选项是在类中使用克隆方法。在那里,您可以从对象实例的克隆中取消设置任何不需要的属性,例如:

public function __clone() {
    unset( $this->my_secret_property ); 
}
然后您的var_转储将引用克隆:

var_dump( clone My_Object_Instance );

或者,如果您需要在其他地方进行克隆,您的类可以使用_debugInfo()方法完全控制其var_dump输出,例如在您取消设置任何不需要的数组元素后返回get_object_vars($this)。

为什么?var_dump用于调试。它应该向你展示里面的一切。它不是一般用途的输出格式化程序。@MarcB因为在我的对象上,类包含活动记录(私有属性)。我不需要这个来说明,因为这是一个很长的列表。我想当我调试它时,我只想看到短列表,它是公共属性。太好了!这可能是另一种解决方案。如果您的函数也输出变量类型,那就太好了。
var_dump( clone My_Object_Instance );