PHP Dom:nodeValue读取为对象而不是字符串

时间:2011-11-01 20:31:47

标签: php dom

我正试图从一堆网页中拉出链接并在表格中报告。我有这个函数,get_links($ pageId),它应该获取页面的内容并提取每个锚标记的值和href属性。

function get_links($pageId) {
    $page_contents = file_get_contents('http://www.mysite.com/?p='.$pageId);
    $html = new DOMDocument();
    @$html->loadHTML($page_contents);
    $anchors = $html->getElementsByTagName('a');
    $link_array = array();
    foreach($anchors as $anchor) {
        if (!empty($anchor->nodeValue)) {
            $text = $anchor->nodeValue;
            $link = $anchor->getAttribute('href');
            $link_array[$text] = $link;
        }
    }
    return $link_array;
}

当我在其中一个页面上运行此函数时,它什么都不返回。例如,如果我打电话:

$page_links = get_links('someId');
foreach($page_links as $text->$link) {
    //my print functions
};

我为foreach行收到“致命错误:无法访问空属性”。

在foreach($ anchors)循环中回显$ text和$ link工作正常。因此,在循环之后回显来自$ link_array的值。但回显却没有。如果我在循环之后立即进行此测试:

foreach($link_array as $text->$link) {echo $text;}

我收到此错误:“可捕获的致命错误:类stdClass的对象无法转换为字符串。”

为什么它会在循环中打印好,但当我把它放在一个数组中返回时会被视为一个对象?

1 个答案:

答案 0 :(得分:1)

您正在尝试将foreach循环的迭代值分配给对象的属性。我想你真的想要

foreach($link_array as $text => $link) { echo $text;}

代替。

$text->$link告诉PHP采用当前的foreach迭代值,并将其分配给$ text对象的$ link属性 - 但是,$ text和$ link在那时不是对象,所以你'重新分配不存在的对象的不存在属性,导致“无法访问空属性”错误。