我的应用程序中的一个函数执行以下操作:
从数据库中恢复此块并对其进行解码时出现问题。我在var_dump对象时可以看到@attributes,但找不到允许我访问它们的命令组合。
错误消息是:致命错误:无法使用stdClass类型的对象作为数组
以下是我的对象示例。我曾尝试过,其中包括以前的工作。
echo $obj['class'];
stdClass Object
(
[@attributes] => stdClass Object
(
[class] => race_idx_hdr
)
[img] => stdClass Object
(
[@attributes] => stdClass Object
(
[src] => /Images/Icons/i_blue_bullet.gif
[alt] => image
[title] => United Kingdom
)
)
[a] => Fast Cards
)
答案 0 :(得分:3)
我实际上并不真正理解你要做什么以及抛出错误的地方,但是要访问对象的属性你可以使用
echo $obj->{'@attributes'}->class; // prints "race_idx_hdr"
echo $obj->img->{'@attributes'}->src; // prints "/Images/Icons/i_blue_bullet.gif"
echo $obj->img->{'@attributes'}->alt; // prints "image"
echo $obj->img->{'@attributes'}->title; // prints "United Kingdom"
echo $obj->a; // prints "Fast Cards"
这种奇怪的语法($obj->{'@attributes'}
)是必需的,因为@
- 符号在PHP中保留,不能用于标识符。
答案 1 :(得分:2)
从数据库解码json时,会得到一个类型为'stdClass'的对象,而不是SimpleXMLElement :: xpath函数返回的原始类型'SimpleXMLElement'。
stdClass对象不知道SimpleXMLElement对象用于访问属性的伪数组语法。
通常你会使用serialize()和unserialize()函数而不是json_encode / decode来存储数据库中的对象,但不幸的是,SimpleXMLElements不能使用它们。
作为替代方案,为什么不只是存储实际的xml并在从数据库中获取后将其读回SimpleXML:
// convert SimpleXMLElement back to plain xml string
$xml = $simpleXML->asXML();
// ... code to store $xml in the database
// ... code to retrieve $xml from database
// recreate SimpleXMLELement
$simpleXML = simplexml_load_string($xml);
答案 2 :(得分:0)
如果将对象转换为数组,则结果是一个数组,其元素是对象的属性。
$asArray = (array)$myObj;
echo $asArray['@attribute'];