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


PHP Dom: nodeValue read as object instead of string

我正试图从一堆网页上拉出链接,并在表格中报告它们。我有这个函数,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
};

我得到"Fatal error: Cannot access empty property" for foreach line.

在foreach($anchors)循环中回显$text和$link可以正常工作。在循环后回显$link_array的值也是如此。但是回显则不会。如果我把这个测试放在循环之后:

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

我得到这个错误:"可捕获的致命错误:类stdClass的对象不能转换为字符串。"

为什么它在循环期间打印正确,但当我把它放在数组中返回时被视为对象?

您正在尝试将foreach循环的迭代值分配给对象的属性。我认为你实际上需要

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

$text->$link是告诉PHP取当前foreach迭代值,并将其分配给$text对象的$link属性-然而,$text和$link在那一点上不是对象,所以你分配给一个不存在的对象的不存在属性,导致"Cannot access empty property"错误。