是否有任何功能或如何 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"
json_encode
只会对公共属性进行编码。
如本页所示,您可以遍历对象:
<?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";
}
?>
注意 $Password 变量是看不见的,因为它被标记为 Private 并且我们试图从全局范围访问它。
如果你想制作自己的 var 转储,你可以这样做:
function dumpObj( $obj )
{
foreach( $obj as $k=>$v )
{
echo $k . ' : ' . $v ."\n";
}
}
dumpObj( new WhateverClass() );
这样做的原因是,当您在其外部访问对象时,您只能访问其面向公众的成员变量。
怎么样json_decode(json_encode($obj))
?
一种选择是在您的类中使用 __clone 方法。在那里,您可以从对象实例的克隆中取消设置任何不需要的属性,例如:
public function __clone() {
unset( $this->my_secret_property );
}
那么您的 var_dump 将引用克隆:
var_dump( clone My_Object_Instance );
或者,如果您需要在其他地方进行克隆,您的类可以在取消设置任何不需要的数组元素后使用 __debugInfo() 方法来完全控制其 var_dump 输出,例如返回 get_object_vars( $this )。