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

Posted

技术标签:

【中文标题】PHP:SimpleXMLElement() 类和 SimpleXML_load_string() 有啥区别?【英文标题】: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。我无法理解它是什么。

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

【问题讨论】:

【参考方案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 是的。如果您愿意,我可以链接它,但是由于您已经在问题中提到了手册,因此认为没有必要。

以上是关于PHP:SimpleXMLElement() 类和 SimpleXML_load_string() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

在 puphpet PHP 5.6 上找不到类“SimpleXMLElement”

如何在 PHP 中回显此 SimpleXMLElement 中的 OK 属性? [复制]

php 扩展SimpleXMLElement

PHP中SimpleXMLElement对象字符编码

解决PHP-问题:Class 'SimpleXMLElement' not found in

阿里大鱼simplexmlelement object 取值PHP