Исключения в php

Большинство основных функций php были написаны до того, как в язык добавили обработку исключений, поэтому они не генерируют исключений, а возвращают false в случае ошибки. Надо самому контролировать возвращаемые значения. Например, вместо $content = file_get_contents('foobar.json'); приходится писать:

$content = file_get_contents('foobar.json');
if ($content === false) {
throw new FileLoadingException('Could not load file foobar.json');
}

а вместо $foobar = json_decode($content); надо так:

$foobar = json_decode($content);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new FileLoadingException('foobar.json does not contain valid JSON: '.json_last_error_msg());
}

Но в реальности кто-то этим занимается при каждом вызове функции? Возможно, существуют такие педанты, но я не встречал. Кроме того, при этом страдает читаемость кода.

Выход? Например, перейти на Python или NodeJS, но это не всегда возможно. Другой вариант — использовать библиотеку Safe-PHP, которая переопределяет все основные функции php, сохраняя их имена и функциональность, при этом снабжая их способностью выкидывать правильные исключения. Переопределенные функции лежат в пространстве имен Safe под теми же именами. В результате предыдущие фрагменты можно написать так:

use function Safe\file_get_contents;
$content = file_get_contents('foobar.json');

и так:

use function Safe\json_decode;
$foobar = json_decode($content);

Подключается через composer. При необходимости можно произвести рефакторинг своего кода при помощи библиотеки Rector

Мне давно не хватало такого инструмента.

Оригинал: VK.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *