【发布时间】:2011-08-29 22:26:57
【问题描述】:
我见过很多程序员实现SimpleXML_load_string() 而不是SimpleXMLElement() 类。使用前者比使用后者有什么好处吗?我读过PHP manual on simplexml。我无法理解它是什么。
任何帮助和指导(可能通过示例)将不胜感激。提前致谢。
【问题讨论】:
我见过很多程序员实现SimpleXML_load_string() 而不是SimpleXMLElement() 类。使用前者比使用后者有什么好处吗?我读过PHP manual on simplexml。我无法理解它是什么。
任何帮助和指导(可能通过示例)将不胜感激。提前致谢。
【问题讨论】:
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()一样工作吗?
file_get_contents())。如果不是,那么你 a) 必须设置 SimpleXMLElement::__construct() 的第三个参数,或者 b) 使用 simplexml_load_file() php.net/simplexml-load-file
它主要是一个方便的包装器。通过自己构建基本元素,您至少需要两行代码来完成任何事情。对于simplexml_load_string(),一个表达式可能就足够了:
print simplexml_load_string($xml)->title;
短于:
$e = new SimpleXMLElement($xml);
print $e->title;
当然,函数签名也有细微的变化。
更新:而且长度和的一模一样
print(new SimpleXMLElement($xml))->title;
【讨论】:
simplexml_load_string 可以返回不同的对象:
类名
您可以使用此可选参数,以便 simplexml_load_string() 将返回一个 指定类的对象。那 类应该扩展 SimpleXMLElement 类。
【讨论】: