Где-то в моем коде у меня есть:
class aclass {
...
function amethod() {
$this->dom = $a_dom_document;
$this->about = array('an_element' => $an_element_of_that_document);
}
...
}
/* Somewhere else */
$instance->dom; // It's there, no problem.
$instance->about['an_element']->parentNode->replaceChild($something_else, $this->about['an_element']);
Код сложный;Здесь я пытаюсь дать только суть.
Странно то, что это работает примерно четверть времени.3 раза из 4 PHP говорит, что replaceChild - это «вызов функции-члена replaceChild () для необъекта», но в четверть времени он действительно работает.Что может происходить?
Редактировать: следующее
print_r($instance->about['an_element']);
print_r($instance->about['an_element']->parentNode);
print method_exists($instance->about['an_element'], 'replaceChild')?'exists':'does not exist');
print_r($something_else);
возвращает:
DOMElement Object
(
)
DOMElement Object
(
)
exists
DOMElement Object
(
)
Это верно даже при сбое страницы.
Я, должно быть, упускаю что-то очень очевидное.$thing_else - это узел того же документа DOM.
РЕШЕНИЕ: Это было действительно очень просто: по причинам, которые я до сих пор не совсем понимаю, эта часть кода вызывается дважды.В одном случае экземпляр не определен, но этот экземпляр появляется на втором месте в журналах, и я действительно искал только один.Если бы позаботился об этом.Теперь я должен понять, почему # @! ~ Их два.