[英]PHP DOMDocument suddenly object of different class
我試圖返回DOMDocument的根元素( $doc->documentElement
),然后訪問ownerDocument
的公共成員$foo
。 這給我
Undefined property: DOMDocument::$foo in /var/www/temp/test.php on line 16
因為在返回根元素之后,成員ownerDocument
不再是\\test\\DOMDocument
類,而是\\DOMDocument
。
代碼有什么問題?
(PHP 5.5.9-1ubuntu4.5123)
<?php
namespace test;
class DOMDocument extends \DOMDocument {
public $foo = 'bar';
}
function test() {
$doc = new DOMDocument();
$doc->loadXML('<root></root>');
echo $doc->documentElement->ownerDocument->foo; // bar
return $doc->documentElement;
}
$doc = test();
echo $doc->ownerDocument->foo; // error: $foo is not defined
?>
<?php
namespace test;
class DOMDocument extends \DOMDocument {
public $foo = 'bar';
}
function test($doc) {
echo $doc->documentElement->ownerDocument->foo; // bar
return $doc->documentElement;
}
$doc = new DOMDocument();
$doc->loadXML('<root></root>');
$doc2 = test($doc);
echo $doc2->ownerDocument->foo; // bar
?>
這是ext / dom GC中的錯誤。 您始終需要對文檔對象的有效引用。 如果不是,則該對象可以將其類更改為\\DOMDocument
或完全從內存中刪除。
您可以在函數內部創建文檔,並且僅返回文檔元素節點,而不返回文檔。 $ doc上的引用計數器在函數調用結束時變為零。
如果將文檔的創建和使用分開,對您的影響不會太大。 在這種情況下,文檔對象將具有一個變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.