【发布时间】:2012-01-08 15:59:50
【问题描述】:
是否可以动态发现 PHP 对象的属性?我有一个对象,我想剥离它并将其作为完全填充的 stdClass 对象返回,因此我需要删除输入中使用的一些子级别 - 内部 - 对象类型。
我的猜测是我需要它是递归的,因为源对象中对象的属性可以包含对象,等等。
任何建议,我有点卡住了?我试过摆弄反射类 get_object_vars 并将对象转换为数组。老实说,一切都没有成功..
【问题讨论】:
标签: php
是否可以动态发现 PHP 对象的属性?我有一个对象,我想剥离它并将其作为完全填充的 stdClass 对象返回,因此我需要删除输入中使用的一些子级别 - 内部 - 对象类型。
我的猜测是我需要它是递归的,因为源对象中对象的属性可以包含对象,等等。
任何建议,我有点卡住了?我试过摆弄反射类 get_object_vars 并将对象转换为数组。老实说,一切都没有成功..
【问题讨论】:
标签: php
经过测试,这似乎有效:
<?php
class myobj {private $privatevar = 'private'; public $hello = 'hellooo';}
$obj = (object)array('one' => 1, 'two' => (object)array('sub' => (object)(array('three' => 3, 'obj' => new myobj))));
var_dump($obj);
echo "\n", json_encode($obj), "\n";
$recursive_public_vars = json_decode(json_encode($obj));
var_dump($recursive_public_vars);
【讨论】:
您可以使用foreach 浏览对象的(公共)属性:
foreach ($object as $property => $value)
... // do stuff
如果你在那里遇到另一个物体 (if (is_object($value))),你将不得不重复同样的事情。理想情况下,这将发生在递归函数中。
【讨论】: