Возвращаемое значение из внешнего класса PHP для использования в условии If - PullRequest
0 голосов
/ 25 декабря 2018

Все еще изучаю программирование ООП, но я тестирую с proxy-scraper

Вот мой test.php скрипт, который я ищу, чтобы вернуть переменную из класса во внешний phpfile:

<?php

use GuzzleHttp\Client as GuzzleClient;
use Vantoozz\ProxyScraper\HttpClient\GuzzleHttpClient;
use Vantoozz\ProxyScraper\Scrapers;

$scraper = new Scrapers\HideMyIpScraper($httpClient);

foreach ($scraper->get() as $proxy2) {

    $proxyexplode = explode(':', $proxy2);
    $ipv4proxy = (string)$proxyexplode [0];
    $portproxy = (int)$proxyexplode [1];

    $proxy = new Proxy(new Ipv4($ipv4proxy), new Port($portproxy));

}

Теперь это взаимодействует с файлом на моем локальном хосте Scrapers/HideMyIpScraper.php.Весь файл php можно посмотреть здесь

Всякий раз, когда в моем цикле foreach запускается $proxy, это называется:

/**
 * @return \Generator|Proxy[]
 * @throws \Vantoozz\ProxyScraper\Exceptions\ScraperException
 */
public function get(): \Generator
{
    try {
        $html = $this->httpClient->get($this->makeUrl());
    } catch (HttpClientException $e) {
        throw new ScraperException($e->getMessage(), $e->getCode(), $e);
    }

    foreach ($this->extractData($html) as $item) {

        $countrycode = $item['c']['f'];
        var_dump($countrycode);

        if (!\is_array($item)) {
            continue;
        }
        try {
            yield $this->makeProxy($item);
        } catch (InvalidArgumentException $e) {
            continue;
        }
    }
}

Единственное, что я добавил ввыше было $countrycode = $item['c']['f'];

Я пытаюсь получить это значение в моем test.php в цикле foreach, так что это примерно так:

$array = array();
foreach ($scraper->get() as $proxy2) {
    $proxy = new Proxy(new Ipv4($ipv4proxy), new Port($portproxy));
    // $countrycode is var_dumped here from `HideMyIpScraper.php`
    if ($countrycode == 'us') {
        $array[] = $proxy2;
    }

Ноконечно $countrycode находится во внешней функции в другом php-файле, поэтому это неверно и выдает ошибку.

Я пробовал что-то вроде return $countrycode, но это прерывает цикл foreach ($this->extractData($html) as $item) { послепервая итерация.

Как получить переменную $countrycode в моем скрипте test.php для условной логики?

1 Ответ

0 голосов
/ 25 декабря 2018

Возвращает массив, содержащий прокси и код страны из вашего генератора.

public function get(): \Generator
{
    try {
        $html = $this->httpClient->get($this->makeUrl());
    } catch (HttpClientException $e) {
        throw new ScraperException($e->getMessage(), $e->getCode(), $e);
    }

    foreach ($this->extractData($html) as $item) {

        $countrycode = $item['c']['f'];
        var_dump($countrycode);

        if (!\is_array($item)) {
            continue;
        }
        try {
            yield array($this->makeProxy($item), $countrycode);
        } catch (InvalidArgumentException $e) {
            continue;
        }
    }
}

Затем разделите результат в цикле foreach.

$array = array();
foreach ($scraper->get() as $val) {
    list ($proxy2, $countrycode) = $val;
    $proxy = new Proxy(new Ipv4($ipv4proxy), new Port($portproxy));
    // $countrycode is var_dumped here from `HideMyIpScraper.php`
    if ($countrycode == 'us') {
        $array[] = $proxy2;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...