PHP переменные в функции скребка

Я использую 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 я могу объявить пустые переменные / массивы для использования в скрипте, как в Javascript? Я прочитал несколько ответов здесь, в стеке, который, кажется, подразумевает, что нет необходимости объявлять, что кажется странным.

3 ответа

Если бы вы показали всю ошибку, это, вероятно, было бы что-то вроде

Неопределенная переменная: $getLinks

Вероятно потому, что вы имели в виду следующее: getLinks($nextUrl);

Не это: $getLinks($nextUrl);

Работает нормально за пределами 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 это выглядит так, как будто вы должны также объявить его как глобальные функции INSIDE, например так:

$allLinks = array();

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

Это наконец заставило мой код работать.

Другие вопросы по тегам