используя переменные, созданные в функции - PullRequest
0 голосов
/ 29 января 2012

Я использую простой HTML DOM и извлекаю две ссылки с сайта.

function get_links($website) {
$html = file_get_html($website);   
$img = $html->find('div.entry img',0)->src;  
$url = $html->find('div.entry a',0)->href;}

как использовать $ img и $ url после запуска функции get_links?

Ответы [ 4 ]

4 голосов
/ 29 января 2012

У вас есть два варианта.Первый - вернуть их:

function get_links($website) {
    $html = file_get_html($website);   
    $img = $html->find('div.entry img',0)->src;  
    $url = $html->find('div.entry a',0)->href;
    return array('img' => $img, 'url' => $url);
}

Вы можете вернуть только одно значение из функции, поэтому вам нужно создать массив.

Другой вариант - получить аргументы по ссылке:

function get_links($website, &$img, &$url) {
    $html = file_get_html($website);   
    $img = $html->find('div.entry img',0)->src;  
    $url = $html->find('div.entry a',0)->href;
}

Когда вы вызываете это, вы можете предоставить два значения, которые будут содержать значения:

get_links($someurl, $image, $url);
echo $image; // echoes the image source
echo $url; // echoes the url

Я ожидаю, что первый метод (массив) будет проще.

У вас есть другие варианты: вы можете сделать $img и $url глобальными.Это плохая идея.Вы также можете определить get_links как анонимную функцию и использовать ключевое слово use, но я думаю, что это менее полезно.Вы также можете инкапсулировать функцию в объекте:

class Links {
    public $url;
    public $img;

    function __construct($website) 
        $html = file_get_html($website);   
        $this->img = $html->find('div.entry img',0)->src;  
        $this->url = $html->find('div.entry a',0)->href;
    }
}

// elsewhere
$links = new Links($someurl);
$links->img;
$links->url;
}
1 голос
/ 29 января 2012

Вы можете вернуть их в виде массива:

return array(
    'img'  => $img,
    'url'    => $url
);
0 голосов
/ 29 января 2012

Ваша функция выполнена только частично. Вам нужно вернуть эти значения вызывающему источнику для использования там. При возврате нескольких значений из функции я предпочитаю возвращать ее как ассоциативный массив.

function get_links($website) {
   $html = file_get_html($website);   
   $img = $html->find('div.entry img',0)->src;  
   $url = $html->find('div.entry a',0)->href;}
   $results = array('img' => $img, 'url' => $url);
   return $results;
}
0 голосов
/ 29 января 2012

Существуют различные способы:

  • вернуть их вызывающей стороне (в виде массива)
  • объявить их вне функции в другой области видимости
  • объявить ихglobals
  • и т. д.

Рассмотрите решение, которое лучше соответствует вашей цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...