创建深层嵌套对象,输出其值

时间:2013-11-18 17:07:56

标签: php oop joomla

我有这样的对象。我怎样才能创造类似的东西,这有可能吗?另外,我对如何从此对象获取示例id的值感兴趣。

object(JForm)#136 (5) {
  ["data":protected]=>
  object(JRegistry)#123 (1) {
    ["data":protected]=>
    object(stdClass)#122 (9) {
      ["id"]=>
      string(1) "2"
      ["checked_out"]=>
      string(3) "413"
      ["checked_out_time"]=>
      string(19) "2013-11-17 15:01:46"
      ["name"]=>
      string(4) "erff"
      ["type"]=>
      string(8) "Password"
      ["options"]=>
      string(22) "["hgdfhd","jhf","hjf"]"
      ["label"]=>
      string(5) "gsdfg"
      ["values"]=>
      string(14) "hgdfhd,jhf,hjf"
      ["required"]=>
      string(1) "1"
    }
  }

此处的完整对象:http://pastebin.com/dJ2jP2TP

1 个答案:

答案 0 :(得分:1)

可以在不创建类的情况下创建通用对象。

$foo = new \StdClass();
$foo->somePropery = 'foo';
$foo->otherProperty = new StdCLass();
$foo->otherProperty->childProperty = 'bla';

依旧......

甚至可以从数组中创建通用对象。

$foo = array(
    'JRegistry' => array(
        'data' => array(
            "id" => 1,
            "checked_out"=> false,
            "checked_out_time"=> new \DateTime("now"),
            "name"=> 'John',
            "type"=> 'bla',
            "options"=> array('foo', 'bar', 'baz'),
            "label"=> 'nahca',
            "values"=> array('bla', 'bli'),
            "required"=> false
        )
    )
);

function convertArrayToObj(array $array) {
    $obj = new stdClass();

    foreach($array as $key => $val)
    {
        if (is_array($val)) {
            $obj->$key = convertArrayToObj($val);
        } else {
             $obj->$key = $val;
        }
    }
    return $obj;
}

$fooObj = convertArrayToObj($foo);

var_dump($fooObj);

但是......此对象没有方法,所有属性都是公开的