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;
       }
    } 
}    
Другие вопросы по тегам