【发布时间】:2014-04-16 12:03:11
【问题描述】:
我有一些想要读入 SimpleXMLElement 的 XML,然后通过将元素转换为字符串,将元素值用作字符串。对于每个 SimpleXMLELement,我想在返回之前更改元素字符串。我不想在访问元素的任何地方重复操作,我想在一个地方执行此操作。
我的第一个想法是重写 SimpleXMLElement__toString 但这似乎只能通过 print 调用,而不是通过使用 (string) 转换为字符串。
还有什么我应该覆盖的或者有更好的方法吗?
<?php
$string_xml = "<?xml version='1.0' encoding='UTF-8'?>
<foo>
<bar>baz</bar>
</foo>";
$xml = simplexml_load_string($string_xml, 'ToStringTest');
print "cast ";
$s = (string)$xml->bar;
print $s;
// "cast baz" is printed
print "\nprint ";
print $xml->bar;
// "print uses __toStringbazfoo" is printed
class ToStringTest extends SimpleXMLElement
{
public function __toString()
{
print "uses __toString";
return parent::__toString() . 'foo';
}
}
【问题讨论】:
-
SimpleXML 的逻辑是用 C 语言而不是 PHP 编写的,因此可能不会为类似的事情调用 PHP 函数。除了重载
__toString(),您还可以添加一个额外的方法,例如->getManipulatedString()。 -
理想情况下我想避免这种方法,除了构建 SimpleXMLElement 我希望应用程序的其余部分能够像对待任何其他 SimpleXMLElement 一样对待它
-
没有更好的建议,如果将其添加为答案,我会接受。