Функция rescue
Функция rescue позволяет выполнить переданное замыкание и, если при его выполнении возникнет исключение, вернуть значение по умолчанию вместо выбрасывания ошибки. Первым параметром передаётся замыкание с кодом для выполнения, вторым параметром - значение по умолчанию, которое будет возвращено при возникновении исключения. Третьим параметром можно передать логическое значение, указывающее, нужно ли логировать возникшее исключение.
Синтаксис
<?php
rescue($callback, $default = null, $report = false);
?>
Пример
Давайте попробуем выполнить код, который может вызвать исключение, и вернём значение по умолчанию в случае ошибки:
<?php
$res = rescue(function () {
return 10 / 0;
}, 'error');
echo $res;
?>
Результат выполнения кода:
"error"
Пример
Давайте используем функцию rescue для безопасного парсинга данных из внешнего API, когда сетевой запрос может завершиться ошибкой:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesLog;
class UserController extends Controller
{
public function getExternalData()
{
$data = rescue(function () {
$response = file_get_contents('https://api.example.com/data');
return json_decode($response, true);
}, ['status' => 'fallback'], true);
return $data;
}
}
?>
Пример
Давайте выполним операцию с базой данных, которая может завершиться ошибкой, и в случае неудачи вернём пустую коллекцию:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateSupportCollection;
class ArticleController extends Controller
{
public function index()
{
$articles = rescue(function () {
return Article::where('status', 'published')->get();
}, collect([]));
return $articles;
}
}
?>
Пример
Давайте используем функцию rescue с логированием ошибок для отладки проблемного кода:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesLog;
class ReportController extends Controller
{
public function processData()
{
$result = rescue(function () {
$data = ['a', 'b', 'c'];
return $data[5];
}, 'default value', true);
Log::info('Process result: ' . $result);
return $result;
}
}
?>
Результат выполнения кода:
"default value"
Смотрите также
-
функция
throw_if,
которая выбрасывает исключение при выполнении условия -
функция
throw_unless,
которая выбрасывает исключение, если условие не выполнено -
функция
report,
которая отправляет исключение в обработчик ошибок -
функция
optional,
которая позволяет безопасно вызывать методы на потенциально нулевых объектах