簡體   English   中英

PHP DOMDocument突然出現了不同類的對象

[英]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

?>

ThW提出的解決方案

<?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM