scraper函数中的PHP变量

scraper函数中的PHP变量,php,web-scraping,scraperwiki,Php,Web Scraping,Scraperwiki,我正在使用ScraperWiki构建一个简单的屏幕刮板,从网上商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该url,从那里找到所有链接,转到下一页,等等 这就是我要说的。ScraperWiki使用简单的HTML DOM和CSS选择器: <?php require 'scraperwiki/simple_html_dom.php'; function nextPage(){ $next = $html->find("li

我正在使用ScraperWiki构建一个简单的屏幕刮板,从网上商店获取链接。商店有多个页面,所以我想从第一页获取所有链接,在寻呼机中找到“下一步”按钮,转到该url,从那里找到所有链接,转到下一页,等等

这就是我要说的。ScraperWiki使用简单的HTML DOM和CSS选择器:

<?php 
require 'scraperwiki/simple_html_dom.php';  

function nextPage(){
    $next = $html->find("li.pager-next a"); 
    $nextUrl = 'http://www.domain.com';
    $nextUrl .= $next->href . "\n"; 
    getLinks($nextUrl);
} 

function getLinks($url){    // gets links from product list page   

    $html_content = scraperwiki::scrape($url);
    $html = str_get_html($html_content);

    $x = 0;

    foreach ($html->find("div.views-row a.imagecache-product_list") as $el) { 
        $url = $el->href . "\n";  
        $allLinks[$x] = 'http://www.domain.com';
        $allLinks[$x] .= $url;
        $x++;
    }

    nextPage();
}

getLinks("http://www.domain.com/foo/bar");


print_r($allLinks);

?>

getLinks()
函数在不在函数中时可以正常工作,但当我将它们放入函数中时,会出现“未声明的变量”错误。我的问题是:


在PHP中,我可以声明在整个脚本中使用的空变量/数组吗?我在Stack上读到了一些答案,这似乎意味着不需要声明,这似乎有点奇怪。

如果您显示了整个错误,可能是这样的

未定义变量:$getLinks

可能是因为你的意思是:
getLinks($nextur)

不是这个:
$getLinks($nextur)

它在
nextPage
函数之外工作正常,因为您在那里正确地调用了它

class ScraperWiki{
    public $variable;
    protected $variable;
    private $variable;

    // here you have the option of choosing how your functions and variables are treated...


     private function getLinks(){...}



     public function someOtherFunction(){
          $this->getLinks(); //will call the function in this Class
     }
}

另外还有一个语法错误$getLinks($nextUrl);应该是getLinks($nextUrl)

在其他答案的帮助下,我自己找到了解决方案-必须在脚本开始时声明$allLinks,在任何函数之外。在Javascript中,这足以使其成为全局的,但在PHP中,似乎还必须在函数内部将其声明为全局的,如下所示:

$allLinks = array();

function foo(){
    global $allLinks
    ...//stuff
}

这最终使我的代码正常工作。

变量范围仍然存在。可以使用参数,也可以将“
global
”变量邀请到每个函数中。可能重复@mario Cheers,但找不到好的引用。这里的问题是,在调用函数之前,变量没有值,所以我不能声明它们。在上面的例子中,让他们通过的最佳方式是什么?他是按程序构建的,他无意将其变成一个类。构建类并不总是最佳实践。如果您不需要OOP的功能,那么您无缘无故地增加了开销。不,我得到了:
PHP注意:未定义变量:当我尝试打印($allLinks)时,第33行的/home/scriptrunner/script.PHP中的allLinks在脚本的末尾。这意味着$allLinks未定义。将其定义为空数组。如果
循环的
从未运行,则$allLinks从未定义就在你的include之后,我想你会被设置好的。你的铲运机没有归还任何东西。