如何修复节点名称的 simpleXML“警告:非法字符串偏移”?
How to fix simpleXML “Warning: Illegal string offset” for node name?
我使用 simpleXML 来解析来自服务器的一些 XML 响应,我是这样加载的:
$xml = simplexml_load_string($string);
它有一个唯一的 child,但不同的响应有不同的名称,所以我先得到 child 名称:
$node = $xml->children()->getName();
我创建了新的 object 响应并将其属性设置为我从 XML 字符串中读取的内容:
return (new Response())
->setTime((string)$xml['time'])
->setId((string)$xml->$node['id'])
->setResult((string)$xml->$node['result'])
->setBalance((string)$xml->$node->balance['value']);
这里出现了这个警告 - Illegal string offset 'id'
、Illegal string offset 'result'
我知道,$node
实际上是一个字符串,但它用作响应中的节点名称。
如果我将代码更改为 ->setId((string)$xml->result['id'])
,警告就会消失。
问题是,在响应实际到来之前,我不知道节点的名称
(例如可以是“good_result”、“result_1”等)。
所以,'$node['id']' 不是请求字符串索引,而是请求节点的属性。
它看起来像 PHP 字符串索引语法和简单的 XML 节点名称语法之间的冲突。
- 代码本身工作正常,警告仅出现在 IDE
- simple有很多类似的问题XML,但是没有回答我的情况
- 我只需要删除那个警告,所以请回答如何在代码中修复它,或者接受删除此类警告
有两种可能的方式来解释这种形式的代码:
$object->$foo['bar'];
- 7.0以后的PHP版本会查找
$foo
标识的属性,然后在结果上查找键'bar'
,也就是你想要。
- 旧版本的 PHP 会先计算
$foo['bar']
,然后根据该结果查找 属性。
您 IDE 中的警告采用旧的解释:它警告您 $foo['bar']
没有意义,因为 $foo
是一个字符串。
除非您实际上 运行 您的代码是 PHP (5.6 hasn't had an official security update for over 2 years) 的古代版本,否则代码没有实际问题。您需要升级 IDE,或重新配置它,以便它以与实际 PHP 相同的方式解释代码。由于您没有提及 IDE 您使用的是什么,所以我不能说得更具体。
我使用 simpleXML 来解析来自服务器的一些 XML 响应,我是这样加载的:
$xml = simplexml_load_string($string);
它有一个唯一的 child,但不同的响应有不同的名称,所以我先得到 child 名称:
$node = $xml->children()->getName();
我创建了新的 object 响应并将其属性设置为我从 XML 字符串中读取的内容:
return (new Response())
->setTime((string)$xml['time'])
->setId((string)$xml->$node['id'])
->setResult((string)$xml->$node['result'])
->setBalance((string)$xml->$node->balance['value']);
这里出现了这个警告 - Illegal string offset 'id'
、Illegal string offset 'result'
我知道,$node
实际上是一个字符串,但它用作响应中的节点名称。
如果我将代码更改为 ->setId((string)$xml->result['id'])
,警告就会消失。
问题是,在响应实际到来之前,我不知道节点的名称
(例如可以是“good_result”、“result_1”等)。
所以,'$node['id']' 不是请求字符串索引,而是请求节点的属性。
它看起来像 PHP 字符串索引语法和简单的 XML 节点名称语法之间的冲突。
- 代码本身工作正常,警告仅出现在 IDE
- simple有很多类似的问题XML,但是没有回答我的情况
- 我只需要删除那个警告,所以请回答如何在代码中修复它,或者接受删除此类警告
有两种可能的方式来解释这种形式的代码:
$object->$foo['bar'];
- 7.0以后的PHP版本会查找
$foo
标识的属性,然后在结果上查找键'bar'
,也就是你想要。 - 旧版本的 PHP 会先计算
$foo['bar']
,然后根据该结果查找 属性。
您 IDE 中的警告采用旧的解释:它警告您 $foo['bar']
没有意义,因为 $foo
是一个字符串。
除非您实际上 运行 您的代码是 PHP (5.6 hasn't had an official security update for over 2 years) 的古代版本,否则代码没有实际问题。您需要升级 IDE,或重新配置它,以便它以与实际 PHP 相同的方式解释代码。由于您没有提及 IDE 您使用的是什么,所以我不能说得更具体。