As of version 5.6, PHP still behaves as reported by jb at jbpros dot com. To use replaceChild() in a loop, the more standard pattern used in the following example can be used:
for ($currentNode = 0; $currentNode < $link->childNodes->length; $currentNode++) {
$child = $link->childNodes[$currentNode];
// "Remove" links, since links can't contain links
if ($child instanceof DOMElement && $child->tagName == 'a') {
$replacement = $dom->createTextNode($child->textContent);
$link->replaceChild($replacement, $child);
}
}