PHP-file_get_contents: невозможно проверить два file_get_contents в одном операторе if - PullRequest
0 голосов
/ 21 января 2019

Я выполняю два api вызова через один и тот же оператор if, чтобы убедиться, что они оба возвращают значения.Форма проверки ошибок.

Они оба проходят тест, однако первый file_get_contents не может быть получен или расшифрован с помощью json_decode.

    if (
      $exchangeRates = (file_get_contents('https://api.coinbase.com/v2/exchange-rates'))
      &&
      $data = (file_get_contents('https://api.coinbase.com/v2/prices/spot?currency=USD'))
    ){

    $json1 = json_decode($exchangeRates, true);
    $json2 = json_decode($data, true);

    return [$json1, $json2];
}

Вышеуказанное возвращает:

[
 1,
 {
  "data": 
   {
   "base": "BTC",
   "currency": "USD",
   "amount": "3532.335"
   }
 }
]

Когда я ссылаюсь на отдельные значения в $json1, они возвращают ноль.

Когда URL-адреса вводятся в URL-адрес вручную, они оба возвращают соответствующий JSON.

Может толькоодин file_get_contents будет использоваться для оператора if?

1 Ответ

0 голосов
/ 21 января 2019

Пожалуйста, проверьте Приоритет оператора , && имеет более высокий приоритет, поэтому сначала выполняется get_file_contents, затем используйте && и возвращается к $ exchangeRates. Наконец, $ exchangeRates является логическим значением. Вы должны правильно использовать () в этом случае:

    if (
($exchangeRates = file_get_contents('https://api.coinbase.com/v2/exchange-rates'))
    &&
($data = file_get_contents('https://api.coinbase.com/v2/prices/spot?currency=USD'))
) {

    $json1 = json_decode($exchangeRates, true);
    $json2 = json_decode($data, true);

    return [$json1, $json2];
}
...