我有以下对象:
object(Intro\IntroBundle\Entity\User)#333 (6) {
["id":"Intro\IntroBundle\Entity\User":private]=>
int(3)
["username":"Intro\IntroBundle\Entity\User":private]=>
string(3) "aaa"
["email":"Intro\IntroBundle\Entity\User":private]=>
string(9) "aa@aa.com"
["password":"Intro\IntroBundle\Entity\User":private]=>
string(4) "a1a1"
["age":"Intro\IntroBundle\Entity\User":private]=>
int(10)
["dateCreated":"Intro\IntroBundle\Entity\User":private]=>
object(DateTime)#330 (3) {
["date"]=>
string(26) "2011-01-01 01:01:00.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
}
我使用了方法:
array($entity);
json_decode(json_encode($entity), true);
get_object_vars ($entity);
并使用个人方法
private function objToArray($obj){
$arr = array();
if(!is_object($obj) && !is_array($obj)){
$arr = $obj;
die("invalid data");
}
foreach ($obj as $key => $value)
{
if (!empty($value))
{
$arr[$key] = array();
objToArray($value, $arr[$key]);
}
else
{
$arr[$key] = $value;
}
}
return $arr;
}
所有这些方法都返回一个空数组。请告诉我为什么?我提到我的对象输入($entity
)不是空的
如果你不知道答案,也请不要让我不喜欢。
答案 0 :(得分:1)
您对象的属性是私有的。如果你var_dump()
一个对象,它也打印private
属性。
查看这篇文章http://php.net/manual/en/language.oop5.iterations.php。您可以像对象一样迭代对象,但它只迭代公共属性。
答案 1 :(得分:1)
首先,我们无法看到范围。您的所有代码都是私有的(对象属性和方法)。展示范围,我们可以帮助您更好。
问题似乎在这里:
if (!empty($value))
{
$arr[$key] = array();
objToArray($value, $arr[$key]);
}
您正在传递未在方法
中定义的第二个参数 private function objToArray($obj){...}
所以你将一个值传递给objToArray()
,我猜这个值是一个字符串,当它到达这一行时:
$arr = array();
if(!is_object($obj) && !is_array($obj)){
$arr = $obj;
die("invalid data");
}
然后它将显示"无效数据",并清空你的数组。