__toString() is not intended to be called directly.Instead, it defines what is returned when the object is cast to string, either explicitly with:(string)$elementOr implicitly, when used in certain contexts which would cause a conversion to string.
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SimpleXMLElement::__toString — 文字列で要素の内容を返す
この要素に直接入っているテキストの内容を返します。 この要素の子要素の内部にあるテキストの内容を返してはいけません。
この関数にはパラメータはありません。
成功したときは、テキストの内容を文字列で返します。 失敗したときは空文字列を返します。
例1 文字列で内容を取得する
<?php
$xml = new SimpleXMLElement('<a>1 <b>2 </b>3</a>');
echo $xml;
?>
上の例の出力は以下となります。
1 3
__toString() is not intended to be called directly.Instead, it defines what is returned when the object is cast to string, either explicitly with:(string)$elementOr implicitly, when used in certain contexts which would cause a conversion to string.
For those for whom it may not be immediately obvious from the example, the echo is what is forcing __toString() to be used.
However, to assign the text of a node (but not its children) to a variable:
$XML = new SimpleXMLElement('<p>Hello<span> world</span>.<span> Good day!</span></p>');
$Text = $XML->__toString();
is effectively:
$Text = 'Hello.'; // The <span>s are ignored.
Either of:
$Text = $XML->span->__toString();
$Text = $XML->span[0]->__toString();
is effectively:
$Text = ' world'; // Only the first <span> is used.
$Text = $XML->span[1]->__toString();
is effectively:
$Text = ' Good day!'; // Only the second <span> is used.