2011-11-29 94 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) –