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 属性? [复制]