1. ホーム
  2. php

コンテキストに関係なく SimpleXML オブジェクトを強制的に文字列に変換する

2023-08-12 20:20:18

質問

例えば、次のようなXMLがあるとします。

<channel>
  <item>
    <title>This is title 1</title>
  </item>
</channel>

以下のコードは、タイトルを文字列として出力するという点で、私が望むことを行っています。

$xml = simplexml_load_string($xmlstring);
echo $xml->channel->item->title;

ここで問題が発生しました。 以下のコードではタイトルを文字列として扱わないため、配列の中に文字列ではなくSimpleXMLオブジェクトが入ってしまうのです。

$foo = array( $xml->channel->item->title );

こんな感じで回避しています。

$foo = array( sprintf("%s",$xml->channel->item->title) );

が、これは醜いようです。

コンテキストに関係なく、SimpleXMLオブジェクトを強制的に文字列にする最も良い方法は何でしょうか?

どのように解決するのですか?

SimpleXMLObjectを文字列に型キャストしてください。

$foo = array( (string) $xml->channel->item->title );

上記のコードは、内部で __toString() を呼び出しています。このメソッドはSimpleXMLObjectのマッピングスキームを妨害するため、一般には公開されていませんが、それでも上記の方法で呼び出すことができます。