在 PHP 中将对象转换为子类

Cast Object to Subclass in PHP

我正在尝试扩展 SimpleXMLElement class to provide a mechanism to merge sub XML string or other SimpleXMLElement into my SimpleXMLElement, code for that is based on code written by Carlos C Soto in an answer to the question "PHP - SimpleXML - AddChild with another SimpleXMLElement"

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

编辑,因为有人想无缘无故地否决投票:我不是Java开发人员,通常即使遇到这种问题我也不介意,但是SimpleXMLElement 是一个 PHP class 所以我不能在不编写大量代码的情况下轻松包装它。也许某种反射魔法使这成为可能?

当您从 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 有第二个参数,您可以将其命名为 class-name。您也可以为它传递一个 SimpleXMLElement 对象,然后 PHP 将从实例中获取 class-name。