I\'ve seen alot of coders implement SimpleXML_load_string()
instead of the SimpleXMLElement()
class. Are there any benefits to using the former over th
simplexml_load_string can return a different object:
class_name
You may use this optional parameter so that simplexml_load_string() will return an object of the specified class. That class should extend the SimpleXMLElement class.
It's mostly a convenience wrapper. With constructing the base element yourself, you need at least two lines of code to accomplish anything. With simplexml_load_string() a single expression might suffice:
print simplexml_load_string($xml)->title;
Is shorter than:
$e = new SimpleXMLElement($xml);
print $e->title;
And then of course, there is also the slight variation in the function signature.
Update: And exactly the same length as of
print(new SimpleXMLElement($xml))->title;
simplexml_load_string()
(as the name suggest) load xml from a string and returns an object of SimepleXMLElement
. There is no difference between this and using just the usual constructor of the class.
Update:
SimpleXML::__construct()
has an additional parameter (the third one) bool $data_is_url = false
. If this is true
the behavior is the same as simplexml_load_file()
(in conjunction with the common stream wrappers). Thus both simplexml_load_*()
-functions cover the same functionality as SimpleXML::__construct()
.
Additional the functions simplexml_load_*()
has a second parameter string $class_name = "SimpleXMLElement"
to specify the class of the object to get returned. Thats not a specific feature of the functions, because you can "use" something very similar with usual instanciation too
class MyXML extends SimpleXMLElement {}
$a = new MyXML($xml);
$b = simplexml_load_string($xml, 'MyXML');
A difference between the OOP- and the procedural approach is, that the functions return false
on error, but the constructor throws an Exception.