PHP обработка исключения

Исключения в php, по способу своей работы, очень похожи на исключения в других языках программирования, но существует одно большое отличие из за которого многие новички не понимают как с ними работать. Прежде чем разберемся с особенностями обработки исключений в php давайте разберемся что же вообще такое — эти исключения.

Исключения — это класс который принимает в себя определенные свойства и используется для надежности и стабильности кода. Для работы с исключениями используется 4 конструкции:

  1. try { //код }
  2. catch { //код}
  3. throw new Exeption(‘//строковый параметр’)
  4. finally {//код}

Конструкция try

Данная конструкция служит для выполнения кода в котором может возникнуть исключение и может использоваться только в связку с конструкциями catch() или/и finally. В случае возникновения исключения выполнения кода в блоке try останавливается и перебрасывается в блок catch{}(если такой есть) или finally{} (если блока catch нет).

Конструкция catch

Блок catch{} служит для перехвата исключения которое возникает в соответствующем блоке try{}. В качестве аргумента принимает класс исключения. Для одного блока try может быть несколько блоков catch для разных классов исключения.

Конструкция throw

 Генерирует новый класс исключения и вызывает его, перебрасывая из код try в catch

Конструкция finally

Из название понятно, что это последний по приоритету блок, выполнения кода в конструкции, перехвата исключений. Выполняется после блока catch() если таковой имеется или после блока try. Данный блок доступен с версии PHP 5.5 и выше

Рассмотрим на примере всю связку

В блоке try мы проверяем значение переменной $b и если оно больше 2 то генерируем исключение с сообщением ‘Значения больше двух’, в итоге выполнения кода переходит в блок catch. Можете убедиться в этом проверив значение переменной $c — оно будет равно 1.

Но в чем же отличие исключений php от исключений в других языках спросите вы? А в том что по умолчанию ошибки не генерируют класс исключений и от конструкции try catch не будет ни какого толку. Изменим наш предыдущий код и в конструкции try попробуем обратиться к не существующему ключу массива:

В результате выполнения данного примера блок catch не будет вызван, а на экране мы увидим warning(предупреждение) о том что данный ключ массива не существует. То же самое будет при других ошибках php: notice, fatal error. Для того что бы вызвать исключение при любых ошибках нужно воспользоваться функцией set_error_handler(), которая в качестве аргумента принимает пользовательскую функцию, в которой мы должны вызвать исключение. Рассмотрим на примере:

Перед обращением к массиву мы задаем обработчик ошибок с помощью функции set_error_handler, которая вызывает функцию exception_error_handler с параметрами ошибки, а та в свою очередь генерирует класс исключения ErrorExeption, которое мы перехватываем в блоке catch(). Название класса исключения и название пользовательской функции может быть любым.

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

Ваш e-mail не будет опубликован.