Створення винятків в php

Створення винятків в PHP

Відео: Створення власного фреймворка. Обробка помилок в PHP. Частина 1. Урок 14

У попередній статті ми розібрали механізм винятків в PHP. Там ми використовували вже вбудований клас Exception. Однак, ми можемо створювати і свої винятки. Як це робиться, Ви дізнаєтеся з цієї статті.

Створення своїх винятків в PHP потрібно, коли потрібно обробка тільки певного типу помилок. Які можуть бути типи? Можна, наприклад, зробити виключення для роботи з базою даних або виключення для перевірки правильності введених користувачем даних, або виключення для роботи з файлами. Це все окремі типи винятків, які заважати в 1 клас Exception буде, м`яко кажучи, дивно. Більш того, можна не просто створити 1 клас для 1-го типу помилок, але і взагалі для кожної помилки створити окремий клас.

Відео: Створення власного фреймворка. Обробка помилок в PHP. Частина 2. Урок 15




щоб створити виняток в PHP, потрібно оголосити новий клас, успадкований від класу Exception:

lt ;?php
/ * Наш клас винятків для помилок в роботі з файлами * /
classFileExceptionextendsException{
publicfunction __construct($ code){
parent
::__construct("", $ code) -
}
}
try{
$ file
="File.txt"-
if(!file_exists($ file))thrownewFileException(1) -// Якщо файлу не існує, то викидаємо виняток з кодом 1
if(!is_writable($ file))thrownewFileException(2) -// Якщо файл закритий для запису, то викидаємо виняток з кодом 2
$ handler
= fopen($ file,"W") -// Відкриваємо файл для запису
if(!$ handler)thrownewFileException(3) -// Якщо файл не вийшло відкрити, то викидаємо виняток з кодом 3
fclose
($ handler) -
}catch(FileException $ e){
/ * Обробка коду винятку і висновок відповідних повідомлень * /
if($ e-gt;getCode()==1) echo "Файл не знайдено"-
elseif
($ e-gt;getCode()==2) echo "Файл закритий для запису"-
elseif
($ e-gt;getCode()==3) echo "Помилка при відкритті файлу"-
}
?gt;

Зверніть увагу, що в catch () ми вже чекаємо не просто Exception, а саме FileException. Таким чином, якщо буде throw new Exception (), то в цей блок ми просто не потрапимо, так як він чекає виключно FileException і його дочірні класи. З іншого боку, якщо ми напишемо в catch просто Exception, то такий catch буде перехоплювати Exception і все його дочірні класи, в тому числі, і FileException. Але це вже відноситься більше до поліморфізму, ніж до обробки винятків.




І, нарешті, давайте розберемо з Вами варіант, де за кожну помилку відповідає окремий клас:

lt ;?php
classFileNotExistsExceptionextendsException{
publicfunction __construct(){
parent
::__construct("Файл не знайдено") -
}
}
classFileNotWriteExceptionextendsException{
publicfunction __construct(){
parent
::__construct("Файл закритий для запису") -
}
}
classFileNotOpenExceptionextendsException{
publicfunction __construct(){
parent
::__construct("Помилка при відкритті файлу") -
}
}
try{
$ file
="File.txt"-
if(!file_exists($ file))thrownewFileNotExistsException() -
if(!is_writable($ file))thrownewFileNotWriteException() -
$ handler
= fopen($ file,"W") -
if(!$ handler)thrownewFileNotOpenException() -
fclose
($ handler) -
}catch(Exception $ e){
echo $ e
-gt;getMessage() -
}
?gt;

Код досить прозорий, тому в коментуванні не потребує. Зазначу лише те, що такий підхід дещо читабельний. набагато зрозуміліше new FileNotExistsException (), ніж new FileException (1). А мінус даного підходу - створення величезної кількості класів, що, втім, не так критично.

Відео: Уроки PHP & MySQLi - Баз даних

Ось таким чином можна створювати свої власні виключення в PHP. Звичайно, були розібрані далеко не всі можливості, проте, я дотримуюся принципу: розповідати не про те, що я знаю, а про те, що я дійсно використовую у своїй практиці. А тим, хто хоче знати все, можна подивитися в довіднику докладніше про всі можливостях винятків в PHP.

Поділися в соціальних мережах:

Схожі
Створення движка на mvc. Допрацьовуємо роутер.Створення движка на mvc. Допрацьовуємо роутер.
Абстрактні класи в phpАбстрактні класи в php
Reflection api. Reflectionclass.Reflection api. Reflectionclass.
Обробка винятків в jаvascriptОбробка винятків в jаvascript
Створення класу в phpСтворення класу в php
Як створити движок для сайтуЯк створити движок для сайту
Клас для роботи з базою данихКлас для роботи з базою даних
Винятки в phpВинятки в php
Як створити об`єкт по імені класу в phpЯк створити об`єкт по імені класу в php
Синій екран смерті 0x0000008eСиній екран смерті 0x0000008e
» » Створення винятків в php