PHP: SimpleXMLElement()类和SimpleXML_load_string()有何区别?

22
我看到很多程序员在实现XML解析时使用SimpleXML_load_string()而不是SimpleXMLElement()类。使用前者是否有任何好处?我已经阅读了PHP手册关于simplexml的内容,但仍无法理解它的作用。
如果能举一些例子提供帮助和指导,将不胜感激。谢谢!
3个回答

20
simplexml_load_string()函数(顾名思义)从字符串中加载XML,并返回一个SimpleXMLElement对象。在使用该类的通常构造函数和此函数之间没有区别。
更新: SimpleXML::__construct()有一个额外的参数(第三个参数)bool $data_is_url = false。如果这是true,则行为与simplexml_load_file()(与常见的流包装器结合使用)相同。因此,simplexml_load_*()函数覆盖了与SimpleXML::__construct()相同的功能。
此外,simplexml_load_*()函数还有一个第二个参数string $class_name = "SimpleXMLElement",用于指定要返回的对象的类。这不是函数的特定功能,因为您也可以使用通常的实例化方法来实现类似的功能。
class MyXML extends SimpleXMLElement {}
$a = new MyXML($xml);
$b = simplexml_load_string($xml, 'MyXML');

面向对象编程和过程式编程的区别在于,函数在出错时返回false,但构造函数会抛出异常。


我不确定我是怎么错过那个的。使用 simplexml_load_string() 远程检索 XML 如何?它的工作方式是否与 SimpleXMLElement() 相同? - VicePrez
只要您将xml数据作为字符串检索,是的(例如通过file_get_contents())。如果没有,则a)必须设置SimpleXMLElement::__construct()的第三个参数,或b)使用simplexml_load_file()。http://php.net/simplexml-load-file - KingCrunch

5

这主要是一个方便的包装器。如果自己构造基本元素,至少需要两行代码才能完成任何操作。使用simplexml_load_string()可能只需要一行表达式:

 print simplexml_load_string($xml)->title;

是比以下内容短:

 $e = new SimpleXMLElement($xml);
 print $e->title;

当然,函数签名也有轻微的变化。

Update: And exactly the same length as of

print(new SimpleXMLElement($xml))->title;

0

simplexml_load_string 可以返回不同的对象:

class_name

您可以使用此可选参数,以便 simplexml_load_string() 返回指定类的对象。该类应扩展 SimpleXMLElement 类。


@VicePrez 是的。如果您需要,我可以提供链接,但由于您已经在问题中提到了手册,所以认为这并不必要。 - Mel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接