在 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。
我正在尝试扩展 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。