SimpleXML は、XML 操作の効率を大幅に向上させる、シンプルで高速な XML 操作メソッドのセットを提供します。しかし、場合によっては不注意が大きな問題を引き起こす可能性があります。次のコードを見てください。
$xml = simplexml_load_string($title = $xml->タイトル
echo $title;
$xml->title = テスト;
エコー $タイトル
2 番目の出力結果は何になると思いますか? これはテストであり、想像したタイトルではありません。なぜそうなるのでしょうか?その理由は次のとおりです:
echo gettype($xml->title) // オブジェクト
;
ご覧のとおり、$xml->title は文字列ではなく、SimpleXMLElement クラスのインスタンスです。したがって、$title は実際には文字列のコピーではなく、SimpleXMLElement クラスへの参照を保持します。文字列のコピーを取得したい場合は、型変換のみを実行できます:
$title = (string)$xml->title; // 文字列を取得します
echo $title; // タイトルを出力します
SimpleXMLElement は、__tostring() に似たインターフェースを実装する必要があります (興味がある場合は、「ext/simplexml/」にある PHP のソース コードを参照してください)。これにより、次のような式内の文字のように動作できます。エコー文字列として。注意する必要があることがもう 1 つあります:
$_SESSION[test] = $xml->title; // SimpleXMLElement 変数を SESSION に保存します。
$_SESSION[test] = strval($xml->title); // これも機能します。