PHP中的变量范围导致错误

时间:2012-02-13 12:30:27

标签: php syntax

我有以下代码

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范围的修复程序。请帮忙。

5 个答案:

答案 0 :(得分:3)

scraping_digg函数声明变量:

的开头
$ret = array();

答案 1 :(得分:1)

行号是最重要的信息!

 $ret[] = $item;

此行可能会触发通知,在函数开头添加类似

的内容
$ret=array();

答案 2 :(得分:1)

因为$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;
}

答案 3 :(得分:1)

我认为您不会在函数范围内初始化$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;
    }

答案 4 :(得分:1)

我甚至在digg的主页上找不到div类的news-summary。可能永远不会执行foreach循环,因为PHP无法找到您正在寻找的任何div。因此,永远不会声明$ret

但是你可以在函数顶部添加$ret = array();作为他的回答中提到的hsz,以使错误消息消失。