PHP把对象转换为数组的问题

原始对象

object(Qiniu\Http\Error)#24 (2) {
  ["url":"Qiniu\Http\Error":private]=>
  string(25) "http://rs.qbox.me/buckets"
  ["response":"Qiniu\Http\Error":private]=>
  object(Qiniu\Http\Response)#25 (6) {
    ["statusCode"]=>
    int(-1)
    ["headers"]=>
    array(0) {
    }
    ["body"]=>
    NULL
    ["error"]=>
    string(34) "Could not resolve host: rs.qbox.me"
    ["jsonData":"Qiniu\Http\Response":private]=>
    NULL
    ["duration"]=>
    float(11.524)
  }
}

然后把这个对象转化为数组

   var_dump($this->object_array($obj));die; //$obj就是上面那个对象

   function object_array($array) {  
        if(is_object($array)) {  
            $array = (array)$array;  
         } if(is_array($array)) {  
             foreach($array as $key=>$value) {  
                 $array[$key] = $this->object_array($value);  
                 }  
         }  
         return $array;  
    }

成功转化为数组了,但问题来了,不知道为什么数组里面会多出了一些红点,导致无法读取到数组里面的值

在chrome下,把鼠标移动到红点里,显示\u0

图片描述

请问应该怎样才能正确读取到里面的值?

阅读 7.3k
3 个回答

出现红点是因为变量是私有类型。可以用var_export看一下具体的变量名,调用即可。

namespace Qiniu\Http;
class Error{
    private $url = 'http://rs.qbox.me/buckets';
    public $status = 200;
}
$obj = new Error();
$arr = (array)$obj;
var_export($arr);
var_dump($arr["\0Qiniu\\Http\\Error\0url"], $arr['status']);

输出为

array (
  '' . "\0" . 'Qiniu\\Http\\Error' . "\0" . 'url' => 'http://rs.qbox.me/buckets',
  'status' => 200,
)string(25) "http://rs.qbox.me/buckets"
int(200)

protected private 直接用(array)强转, 会添加前缀的. 你应该是需要用 get_object_vars 获取对象变量吧.

文件bom头问题,试试去掉bom

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题