2011-11-29 52 views
0

是否可以动态发现PHP对象的属性?我有一个对象,我想剥离并作为完全填充的stdClass对象返回它,因此我需要摆脱一些在输入中使用的sublevel - internal - objecttypes。动态发现/处理PHP对象

我的猜测是我需要它是递归的,因为源对象中的对象的属性可以包含对象,等等。

任何建议,我有点卡住了?我试着用反射类,get_object_vars和将对象强制转换为数组。所有没有任何成功是诚实..

回答

1

测试,这似乎工作:

<?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); 
+1

虽然它不是我的问题的解决方案(我的解决方案在这里http://stackoverflow.com/questions/8297741/php-analyzing-handling-and-converting-some-object-to-a-stdclass/8312008#8312008 ),这就是我在问题中提出的问题。因此+1和接受。谢谢! – Ben

1

您可以通过对象的(公共)属性行走使用foreach

foreach ($object as $property => $value) 
... // do stuff 

如果遇到另一个对象在那里(if (is_object($value))),你将不得不重复一样。理想情况下,这将发生在递归函数中。

+0

后,我的财产潜水是私有的,很遗憾。这个问题是对我的另一个问题的补充http://stackoverflow.com/questions/8297741/php-analyzing-handling-and-converting-some-object-to-a-stdclass任何建议? – Ben

+0

@你需要添加这个问题,这是一个至关重要的信息 –

+0

@Ben related:[在PHP中从类外部调用私有方法和私有属性](http://stackoverflow.com/q/2738663) –