Php对象没有转换为数组

时间:2016-06-10 07:15:12

标签: php arrays object

实际上我无法将php对象转换为数组,特别是当我有其他访问说明符时。 例如:

<?php

class Foo
{
    public $bar = 'barValue';
    protected $baz = 'bazValue';
    private $tab = 'tabValue';
}

$foo = new Foo();

$arrayFoo = (array) $foo;

echo "<pre>";
var_dump($arrayFoo);

,输出为:

array(3) {
  ["bar"]=>
  string(8) "barValue"
  ["*baz"]=>
  string(8) "bazValue"
  ["Footab"]=>
  string(8) "tabValue"
}

因此我无法获取其名称的密钥,它自动添加*(用于受保护的)和类名(用于私有),

1 个答案:

答案 0 :(得分:2)

您可以使用get_object_vars PHP documentation的评论中提到的功能:

function obj2array ( &$Instance ) {
    $clone = (array) $Instance;
    $rtn = array ();
    $rtn['___SOURCE_KEYS_'] = $clone;

    while ( list ($key, $value) = each ($clone) ) {
        $aux = explode ("\0", $key);
        $newkey = $aux[count($aux)-1];
        $rtn[$newkey] = &$rtn['___SOURCE_KEYS_'][$key];
    }

    return $rtn;
}