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", если файл не найден. Как я могу перехватить исключение и предотвратить дальнейшую обработку в функции?
2 ответа
См. Как я могу обработать предупреждение функции file_get_contents() в PHP? Подробнее о том, как обрабатывать исключения из функции: file_get_contents();
Согласно документации на 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;
}
}
}