【问题标题】:PHP: Whats's the difference between the SimpleXMLElement() class and SimpleXML_load_string()?PHP:SimpleXMLElement() 类和 SimpleXML_load_string() 有什么区别?
【发布时间】:2011-08-29 22:26:57
【问题描述】:

我见过很多程序员实现SimpleXML_load_string() 而不是SimpleXMLElement() 类。使用前者比使用后者有什么好处吗?我读过PHP manual on simplexml。我无法理解它是什么。

任何帮助和指导(可能通过示例)将不胜感激。提前致谢。

【问题讨论】:

    标签: php xml simplexml


    【解决方案1】:

    simplexml_load_string()(顾名思义)从字符串加载 xml 并返回 SimepleXMLElement 的对象。这与仅使用该类的常用构造函数之间没有区别。

    更新:

    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');
    

    OOP 和过程方法之间的区别在于,函数在出错时返回 false,但构造函数会抛出异常。

    【讨论】:

    • 不知道我是怎么错过的。使用simplexml_load_string() 远程检索 XML 怎么样?它仍然像SimpleXMLElement()一样工作吗?
    • 只要您将 xml 数据作为字符串检索,就可以(例如通过file_get_contents())。如果不是,那么你 a) 必须设置 SimpleXMLElement::__construct() 的第三个参数,或者 b) 使用 simplexml_load_file() php.net/simplexml-load-file
    【解决方案2】:

    它主要是一个方便的包装器。通过自己构建基本元素,您至少需要两行代码来完成任何事情。对于simplexml_load_string(),一个表达式可能就足够了:

     print simplexml_load_string($xml)->title;
    

    短于:

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

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

    更新:而且长度和的一模一样

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

    【讨论】:

      【解决方案3】:

      simplexml_load_string 可以返回不同的对象:

      类名

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

      【讨论】:

      • @VicePrez 是的。如果您愿意,我可以链接它,但是由于您已经在问题中提到了手册,因此认为没有必要。
      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2016-08-22
      • 2021-06-04
      • 2019-06-14
      相关资源
      最近更新 更多