今天在用RedbeanPHP 写数据库接口的时候,发现从SimpleXMLElement对象里面出来的值,按理说都是string, 怎么也不能赋值给RedbeanPHP, 用var_dump看了一下,发现SimpleXMLElement对象比较有意思,里面嵌套的对象以及property 的type 都是object,而且都是SimpleXMLElement 对象,在google上搜了一下发现问这个问题的不少。
https://stackoverflow.com/questions/416548/forcing-a-simplexml-object-to-a-string-regardless-of-context
比如说XML是这样的:
<channel> <item> <title>This is title 1</title> </item> </channel>
下面这样确实能够输出string:
$xml = simplexml_load_string($xmlstring); echo $xml->channel->item->title;
但是除了echo 以外,下面这样就不能被当成string了
$foo = array( $xml->channel->item->title );
这是因为$XML->channel->item->title 的type 其实仍然为SimpleXMLElement的对象
我们可以用typecast来解决这个问题:
$foo = array( (string) $xml->channel->item->title );
The above code internally calls __toString() on the SimpleXMLObject. This method is not publicly available, as it interferes with the mapping scheme of the SimpleXMLObject, but it can still be invoked in the above manner.
另外看到有人这么写也可以:
$foo = array( $xml->channel->item->title.'' );
通过gettype查看确实变成了string,具体原理不知道