PHP中的变量作用域导致错误


Error due to variable scope in PHP

我有以下代码

function scraping_digg() {
    // create HTML DOM
    $html = file_get_html('http://digg.com/');
    // get news block
    foreach($html->find('div.news-summary') as $article) {
        // get title
        $item['title'] = trim($article->find('h3', 0)->plaintext);
        // get details
        $item['details'] = trim($article->find('p', 0)->plaintext);
        // get intro
        $item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
        $ret[] = $item;
    }
    // clean up memory
    $html->clear();
    unset($html);
    return $ret;
}

当我运行它时,我会得到以下错误。

Undefined variable: ret in /opt/lampp/htdocs/web_scrapper/example/scraping/example_scraping_digg.php on line 

我找不到$ret范围的修复程序。请帮忙。

scraping_digg函数开始时声明变量:

$ret = array();

行号将是最重要的信息!

 $ret[] = $item;

这一行可能会触发通知,在功能开始时添加类似的内容

$ret=array();

因为$ret未定义。。。

尝试在循环之前声明$ret

function scraping_digg() {
    // create HTML DOM
    $html = file_get_html('http://digg.com/');
    $ret = array();
    // get news block
    foreach($html->find('div.news-summary') as $article) {
        // get title
        $item['title'] = trim($article->find('h3', 0)->plaintext);
        // get details
        $item['details'] = trim($article->find('p', 0)->plaintext);
        // get intro
        $item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
        $ret[] = $item;
    }
    // clean up memory
    $html->clear();
    unset($html);
    return $ret;
}

我认为您没有在函数范围内初始化$ret$item

function scraping_digg() {
        // create HTML DOM
        $html = file_get_html('http://digg.com/');
        $ret = array();
        // get news block
        foreach($html->find('div.news-summary') as $article) {
            $item = array();
            // get title
            $item['title'] = trim($article->find('h3', 0)->plaintext);
            // get details
            $item['details'] = trim($article->find('p', 0)->plaintext);
            // get intro
            $item['diggs'] = trim($article->find('li a strong', 0)->plaintext);
            $ret[] = $item;
        }
        // clean up memory
        $html->clear();
        unset($html);
        return $ret;
    }

我甚至在digg的主页上找不到任何divnews-summary的类。foreach循环可能永远不会执行,因为PHP找不到您要查找的任何div。因此,$ret从未被声明。

但是,您可以在函数的顶部添加$ret = array();,就像hsz在回答中提到的那样,使错误消息消失。