Большинство основных функций 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