Hi!
In SimpleXML ist das noch einen tick komplizierter da sich der geparste XML-Baum aus Objekten und Arrays zusammensetzt
Hinzu kommt noch, dass SimpeleXML mit einiger "Magie" arbeitet, so dass Objekte im String-Kontext ausgegeben werden können, sich wie Arrays ansprechen lassen und man darüber iterieren kann. Man selbst kann solch ein Verhalten in seinen Klassen nachbilden, indem man die magische Methode __toString() erstellt oder aus der SPL Interfaces wie ArrayAccess und Iterator (für foreach) implementiert.
Während sich das Objekt mit print_r wunderbar ausgeben lässt oder man mit echo einen Wert bekommt, kann das an anderer Stelle schon zu Problemen führen.
Wenn man die Werte z.B. in einer Funktion einsetzt, die einen bestimmten Datentyp erwartet und nicht einfach so selbsttätig castet, kann es sein, dass das Typecasting fehlschlägt:
Beispiel:
date('c', $xml->foo[0]->timestamp);
Da typecastet PHP nicht, weil es in dem Fall keinen String-Kontext erkennen kann. Man kann Funktionsparametern keinen type hint für einfache (skalare) Typen mitgeben, sonst könnte PHP erkennen, dass sich der geforderte Skalar einerseits und das komplexe Objekt andererseits gegenüberstehen und eine eventuell vorhandene __toString()-Methode aufrufen. Untypisierte Sprachen haben eben auch Nachteile.
Würde fehlschlagen, folgendes aber nicht:
date('c', (string)$xml->foo[0]->timestamp);
date('c', (int)$xml->foo[0]->timestamp);
Mit ''.$xml->... kann ebenfalls der __toString()-Aufruf "provoziert" werden.
Lo!