某處在我的代碼有:PHP拋出一個錯誤......有時,在一個DOM元素
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']);
的代碼是複雜的;我試圖在這裏給出要點。
奇怪的是,它的作用大約四分之一的時間。 PHP中有3次表示,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
(
)
這是真實的,即使當頁面失敗。
我必須錯過一些非常明顯的東西。 $ something_else是同一個DOM文檔的一個節點。
解答:確實很簡單:由於我仍然不太明白的原因,代碼的這部分被調用兩次。在一種情況下,實例未定義,但該實例在日誌中排在第二位,我真的只是在尋找一個實例。一個如果照顧它。現在我必須明白爲什麼#@!〜首先有兩個。
通常這意味着您的DOM遍歷不起作用。在上面的例子中,這意味着沒有父節點可以找到'an_element' – thetaiko 2010-08-20 12:21:29