[英]How do I get a single level of object details from php?
当我使用debug_backtrace在php中检索stacktrace时,可以让它包括从其调用的对象。 能够同时看到对象的公共属性和私有属性对我来说非常有用,但是对象太大而无法使用。 由于其中的某些变量包含其他对象,因此简单地将其打印出来是不可行的-我尝试将debug_print_backtrace的输出写入文件,并且在出现问题之前达到了23G并停止输出。
我真正需要的是获取此输出以将自身限制在一个层次上,即输出该对象的所有属性,但是如果其中一个是另一个对象,则无需进一步列出我需要的所有属性是它的类名。
我知道可以使用get_object_vars获取对象的公共属性,但是如何获取私有属性呢? print_r,var_export,var_dump等都没有用,因为我无法阻止它们递归。
您可以简单地使用foreach循环遍历对象,如下所示:
foreach($object as $property => $value)
if (is_object($value))
echo(get_class($value)."<br/>");
else
echo($property." => ".$value."<br/>");
但是请记住,这不会显示私有财产。 有关如何克服这些问题的更广泛的解释,请参见以下网址 : http : //www.php.net/manual/zh/language.oop5.iterations.php
您可以将对象转换为数组,然后遍历数组。 私有和受保护的属性也可用,其前缀为用空字节括起来的类名。 您可以像这样测试此行为:
测试:
class Test
{
private $parent;
public function __construct($parent) {
$this->parent = $parent;
}
}
$test = new Test(new Test(new Test(null)));
var_dump((array)$test);
输出:
array(1) {
["�Test�parent"]=>
object(Test)#2 (1) {
["parent":"Test":private]=>
object(Test)#3 (1) {
["parent":"Test":private]=>
NULL
}
}
}
有了数组后,您可以执行一个简单的foreach
,删除前缀并区分对象和其他变量:
foreach((array)$test as $name => $property) {
if (ord($name[0]) === 0) {
$name = substr($name, strrpos($name, "\x0")+1);
}
echo $name, ":";
if (is_object($property)) {
echo "(object)", get_class($property);
} else {
echo var_export($property, true);
}
echo "\n";
}
我将漂亮的照片留给您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.