如何从 stdClass 对象中提取@attributes?

How extract @attributes from stdClass Object?

如何从 stdClass 对象中提取属性?我有变量 $data。对它执行 print_r 我得到:

stdClass Object
(
    [@attributes] => stdClass Object
        (
            [id] => cover
            [title] => Cover
        )

    [text] => text
)

当我尝试阅读 text 时没问题。但是当我尝试用 $data["id"]$data["title"] 读取 idtitle 时得到错误:

致命错误:未捕获错误:无法将 stdClass 类型的对象用作数组...

我该如何解决?唯一的机会是使用 json_encode/json_decode 转换为数组?没有更面向对象的解决方案吗?

谢谢。

通常,您只需像这样使用属性名称:

$data->foo

但是,由于您的属性名称 @attributes 包含一个特殊字符,您必须使用此扩展语法:

$data->{'@attributes'}

然后,您可以进一步引用它的子键:

$id = $data->{'@attributes'}->id;

或者,您可以传递一个真值作为 json_decode() 的第二个参数,然后您将得到一个数组而不是一个对象:

$data = json_decode($raw, true);
$id = $data['@attributes']['id'];