2

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 を拡張するにはどうすればよいですか?

4

1 に答える 1