Извиняюсь за непонятный заголовок, так как не знаю как правильно назвать эту проблему.
Есть класс, в котором реализована авторизация и получение данных из другого сайта.
При вызове метода get_histroy мы должны получить данные с сайта, будучи авторизованными. Если мы не авторизованы, то вызываем метод auth, который проходит авторизацию и после этого снова вызываем метод get_histroy что бы получить данные.
class TestClass{
/**
* @var string
*/
private $login = "";
private $password = "";
private $phone = "";
private $url = "https://test.ru/";
private $curl = "";
public $cookie_file = 'cookie.txt';
function __construct($login, $password, $phone)
{
$this->login = $login;
$this->password = $password;
$this->phone = $phone;
$this->curl = curl_init();
}
/**
* @name Authorization
*/
private function auth()
{
$url_auth = "https://auth.test.ru/auth?retpath=https://mail.test.ru";
curl_setopt($this->curl, CURLOPT_POST, 1);
$post_login = "login=".$this->login."&passwd=".$this->password;
curl_setopt($this->curl, CURLOPT_URL, $url_auth);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $post_login);
curl_exec($this->curl);
curl_setopt($this->curl, CURLOPT_COOKIEJAR, $this->cookie_file); // записываем файл с куками
}
/**
* @param bool $format
* @return array|mixed|null|object
*/
public function get_histroy($format = false)
{
curl_setopt($this->curl, CURLOPT_COOKIESESSION, true);
curl_setopt($this->curl, CURLOPT_COOKIEFILE, $this->cookie_file);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($this->curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
curl_setopt($this->curl, CURLOPT_POST, false);
curl_setopt($this->curl, CURLOPT_URL, $this->url);
$html = curl_exec($this->curl);
$result_history = json_decode($html);
var_dump($result_history);
// если мы авторизованы
if(isset($result_history -> success) && $result_history -> success == "1"){
/**
* @return json || array
*/
if($format == false) return $result_history;
else return json_decode($html, true);
} else{ // если не авторизованы
self::auth(); // проходим авторизацию
self::get_histroy($format); // запускаем функцию заново
}
}
function __destruct()
{
curl_close($this->curl);
}
}
Вызов:
$object = new TestClass("admin", "pass", "+38000000000");
print_r($object ->get_histroy());
Проблема в том, что после авторизации метод не дает нам полученные данные, хотя авторизация проходит нормально. Если вставить var_dump($result_history); как в примере, то данные показываются, а вот из экземпляра класса он не выводится. Только если перезагрузить страницу, то все работает (уже будучи авторизованным).
Старался изложить проблему понятливее.
Решено:
return $this->get_histroy($format); // запускаем функцию заново и возвращаем результат (return)
Нужно было вернуть то что вернула функция.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости