пользовательские исключения — возврат PHP из функции и остановка обработки

У меня есть простая функция в классе. Я пытаюсь увеличить обработку исключений с помощью try / catch. Моя проблема в том, что возврат из try / catch не останавливает обработку в функции. Вот мой код:

class Config {

public static $configarray;

function setConfig($json_path) {
try {
file_get_contents($config_file);
} catch (Exception $e) {
die("Config File not found");
return null;
}
$json = file_get_contents($json_path);
try {
json_decode($json,TRUE);
} catch (Exception $e) {
die("Invalid Config file. Check your JSON.");
return null;
}
self::$configarray = json_decode($json,TRUE);
}

} // Конец класса

Когда я бегу

Config->setConfig('test.json')

Я получаю эти ошибки:

PHP Warning:  file_get_contents(test.json): failed to open stream: No such file or directory in /Config.php on line 30
PHP Warning:  file_get_contents(test.json): failed to open stream: No such file or directory in /Config.php on line 36

Я ВСЕГДА хочу напечатать «Config File Not Found», если файл не найден. Как я могу перехватить исключение и предотвратить дальнейшую обработку в функции?

0

Решение

Увидеть Как я могу обработать предупреждение функции file_get_contents () в PHP? Подробнее о том, как обрабатывать исключения из функции: file_get_contents();

1

Другие решения

В соответствии с документация на file_get_contents (), функция возвращает прочитанные данные или FALSE в случае неудачи, поэтому в вашем случае нет исключений для перехвата, поэтому путь к коду не выполняется. Фактически вы получаете напечатанное ПРЕДУПРЕЖДЕНИЕ, но ни одно из сообщений об ошибках вашего кода.

Чтобы правильно разобраться со случаем, предложение Криса верное, и код будет выглядеть примерно так: Точно так же вы должны защитить свою логику JSON-декодирования.

function setConfig($json_path) {
$data = file_get_contents($config_file);
if ( $data === FALSE ) {
die("Could not read the Config File content");
return null;
}
self::$configarray = null;
$json = file_get_contents($json_path);
if ( $json !== FALSE ) {
try {
self::$configarray = json_decode($json,TRUE);

} catch (Exception $e) {
die("Invalid Config file. Check your JSON.");
return null;
}
}
}
0