我在扩展 PHP DOMElements 时遇到了一个奇怪的行为:
class JavaScript extends DOMElement {
}
class JavaScriptLibrary extends DOMElement {
}
$dom = new DOMDocument();
$node = new JavaScript('script');
$dom->appendChild($node);
$node = new JavaScriptLibrary('script');
$dom->appendChild($node);
$node = new JavaScript('script');
$dom->appendChild($node);
foreach ($dom->childNodes as $childNode) {
echo get_class($childNode)."\n";
}
预期的:
JavaScript
JavaScriptLibrary
JavaScript
结果:
DOMElement
DOMElement
JavaScript
这里会发生什么?
如果我这样做:
addElement($dom, new JavaScript('script'));
addElement($dom, new JavaScriptLibrary('script'));
addElement($dom, new JavaScript('script'));
function addElement($dom, $node){
$dom->appendChild($node);
}
结果将是
DOMElement
DOMElement
DOMElement
我如何在不使用 ->createElement 的情况下做到这一点,例如“我如何扩展 PHP DOMElement? ”。