Я пытаюсь сделать несколько запросов API, и я должен сделать запрос в разных функциях, которые находятся внутри класса:
class exampleClass { function callFunction1 () { // stuff that makes a call return $json; } function printStuffOut() { $jsonStuff = $this->callFunction1(); $$jsonStuff->{'result'}[0]->{'fieldName'}; } function printStuffOut2() { $jsonStuff = $this->callFunction1(); $jsonStuff->{'result'}[0]->{'fieldName'}; } }
Я делаю два отдельных вызова API?
Если да, то есть ли способ сохранить информацию о вызове API в массиве, то использовать этот массив во всех других функциях моего класса?
Ответ на первый вопрос: Да, вы, каждый раз, когда метод называется, он снова выполняет все свое определение.
Ответ на второй вопрос: Да, так называемые свойства членов. Вы можете прочитать о них в руководстве по PHP здесь: Руководство PHP: Свойства
Вы делаете два вызова API, но вам это не нужно.
Вы можете поместить содержимое вызова в переменную-член в классе со значением по умолчанию NULL
, и если вы хотите, вы можете проверить, является ли эта переменная-членом NULL
перед вызовом API. Например;
class exampleClass { private $api_json = NULL; private function call_api() { if(is_null($this->api_json)) { $json = // result of api call; $this->api_json = $json; } return $this->api_json; } public function printStuffOut() { $jsonStuff = $this->call_api(); $jsonStuff->{'result'}[0]->{'fieldName'}; } public function printStuffOut2() { $jsonStuff = $this->call_api(); $jsonStuff->{'result'}[0]->{'fieldName'}; } }
Вы можете использовать следующий класс для одновременного создания / одновременного доступа сразу нескольких API одновременно.
Нажмите здесь, чтобы получить класс.
Как это использовать?
Шаг 1: Получить объект.
//SANI: GET DATA $obj = new multiapi();
Шаг 2: Сделайте несколько запросов GET.
$obj->data = array(YOUR_URL_1,YOUR_URL_2, OUR_URL_3); $result = $obj->get_process_requests(); print_r($result);
Шаг 3. Сделайте несколько запросов HTTP POST.
//SANI: Request with params only $obj->data[0]['url'] = 'YOUR_URL_ONE'; $obj->data[0]['post'] = array(); $obj->data[0]['post']['param_1'] = 'param_value_1'; $obj->data[0]['post']['param_2'] = 'param_value_2';