在PHP中将对象转换为子类

时间:2015-03-19 11:23:04

标签: php oop reflection simplexml downcast

我试图扩展SimpleXMLElement类,以提供将子XML字符串或其他 SimpleXMLElement 合并到我的 SimpleXMLElement 中的机制,代码为这基于问题code written by Carlos C Soto in an answer"PHP - SimpleXML - AddChild with another SimpleXMLElement"

现在我只在子类中添加一个addXml函数(应该通过返回新创建的元素来模拟内置的addChild)但我想每个函数调用都会返回一个 SimpleXMLElement 而不是我新创建的子类。有没有办法在PHP中与Java相媲美?

编辑,因为有人认为没有任何理由而无法投票:我没有Java开发人员,通常我也不会介意这类问题,但 SimpleXMLElement 是一个PHP类,因此我无法在不编写大量代码的情况下轻松地将其包装起来。也许某种反射魔法使这成为可能?

1 个答案:

答案 0 :(得分:1)

SimpleXMLElement 扩展时,父方法会为您提供新类型:

class MyXml extends SimpleXMLElement
{
}

$xml = new MyXml('<root />');

$child = $xml->addChild('child');

var_dump(get_class($child)); # string(5) "MyXml"

这特定于 SimpleXMLElement 而不是PHP。所以你总是要尝试。这是评论你的问题的人试图告诉你的。

接下来,simplexml_import_dom function有第二个参数,您可以为其命名类名。您也可以为它传递 SimpleXMLElement 对象,然后PHP将从实例中获取类名。