добрый день! Пытаюсь построить приложение для работы с API яндекса по SOAP. Функционал работает, но сегодня стали вылазить предупреждения и ошибки из-за недоступности сервисов яндекса: Код (Text): Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity "https://soap.direct.yandex.ru/v5/general.xsd" Fatal error: SOAP-ERROR: Parsing Schema: can't import schema ошибка вызывается при инициализации клиента: PHP: $client = new SoapClient($wsdl,$clientOptions); Поскольку я не могу проверить результат на каждую ошибку, можно ли сделать что-то вроде: PHP: try{ $client = new SoapClient($wsdl,$clientOptions); } catch { //если возникает любая ошибка sleep(1); //try again $client = new SoapClient($wsdl,$clientOptions); } Я читал документацию по try catch - и везде в блоке catch нужно прописывать какое именно исключение нужно ловить и т.д. я не понимаю как это применить. Можно ли ловить любое исключение (т.е. любое прупреждение или ошибку) и совершать на них определенное действие?
Можно ловить \Exception или \Trowable, все классы исключений реализуют Trowable, большинство наследуется от Exception. И, как обычно, это подробно описано в доке
Спасибо! я прочитал про классы исключений и видимо ничего не понял... Вот пробую сделать простой пример по аналогии: PHP: try{ $s=$j/0; } catch( Throwable $e){ echo"error!"; } я ожидаю что будет выведено " error! ", но все равно выводится "Warning: Division by zero" зачем нужна переменная $e ? В примерах документации она есть. но не описывается зачем оно нужно.
Может кто-нибудь объяснить как заставить приведенный выше кусок кода работать? Или исключение можно вызвать только если Бросить его через throw - тогда смысла в нем нету
Какая версия php? Конструкции типа 1 / 0 стали бросать исключения только в php 7, и там есть условия. В принципе, такие ошибки я и не отлавливал никогда с помощью try/catch, так что мне до фени эта фитча. Обычно отлавливается то, что кидалось с помощью throw.
Версия php7.2 А с помощью чего еще? если я не знаю какая может произойти ошибка, то я и не могу кинуть никакого конкретного исключения..
Там, где у меня потенциально может быть деление на ноль, я просто if-ом проверяю, чтоб не было в знаменателе нуля Может сейчас кто-то, кто пользуется этой фитчей, расскажет про то, когда 1/0 бросит исключение. Я это прочитал и отложил на полку "любопытно, но не важно". Тут написано, что нефатальные ошибки вроде и не бросают, https://habr.com/ru/post/261451/. Обычно в доке функции, которая может бросить исключение, об этом прямо говорится. Конструктор SoapClient не исключение: