SimpleXML提供了一套簡單快速的XML操作方法,大大地提高了XML操作的效率。但是有時不小心也會帶來不小的麻煩,看下面一段代碼:
$xml = simplexml_load_string(<root><title>title</title></root>);
$title = $xml->title;
echo $title;
$xml->title = test;
echo $title;
猜猜第二個輸出結果會是多少?是test,而不是想像中的title。為什麼會這樣呢?原因在這裡:
echo gettype($xml->title) // object
echo get_class($xml->title); // SimpleXMLElement
看到了嗎,$xml->title是一個SimpleXMLElement類的實例,而不是字符串。所以$title實際上保存的是一個到SimpleXMLElement類的一個引用,而不是字符串的副本。想要得到字符串的副本只能進行類型轉換:
$title = (string)$xml->title; // 獲得字符串
$xml->title = test;
echo $title; // 輸出title
SimpleXMLElement應該是實現了一個類似於__tostring()的接口(有興趣的可以去看一下PHP的源碼,在"ext/simplexml/"中),才能在echo等表達式中表現類似於一個字符串。所以還有個地方需要注意:
$_SESSION[test] = $xml->title; // 保存一個SimpleXMLElement變量到SESSION中。
$_SESSION[test] = (string)$xml->title; // 字符串
$_SESSION[test] = strval($xml->title); // 這樣也行。