Винятки в php

Винятки в PHP

Відео: PHP ООП Винятки

При виникненні будь-яких помилок найчастіше просто повертають false. Потім там, де ця функція була викликана, можна перевірити її результат, і якщо там false, то виконати відповідні дії. Такий підхід має недоліки (наприклад, якщо там, де виникла проблема - зовсім не Ваш код, і Ви не знаєте, звідки взявся false). Механізм винятків в PHP дозволяє перехопити помилку під час виконання коду, яку потім можна обробити в найкращому місці програми. І що найважливіше, даний механізм дозволяє отримати код помилки. Давайте розберемо механізм винятків в PHP більш детально.

Напишемо ось такий код:

lt ;?php
classDataBase{
private $ mysqli-
publicfunction connect($ host, $ user, $ password, $ db){
$ this
-gt;mysqli =@new mysqli($ host, $ user, $ password, $ db) -
}
}
$ db
=newDataBase() -
$ db
-gt;connect("Localhost","Root","","Lesson-local") -
?gt;



Не думаю, що код потребує коментуванні. Зазначу тільки наявність оператора "@", Який заглушає можливі помилки. Але тепер уявімо ситуацію, що користувач передав в метод connect () неправильні дані. Нам не потрібні ніякі Warning, виводяться через PHP - вони зіпсують дизайн сайту, однак, нам необхідно ці помилки, проте, обробляти. Можна, звичайно, написати так:

if($ this-gt;mysqli-gt;connect_errno !=0)returnfalse-


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

Відео: Урок №73. Обробка винятків за допомогою try-catch

lt ;?php
classDataBase{
private $ mysqli-
publicfunction connect($ host, $ user, $ password, $ db){
$ this
-gt;mysqli =@new mysqli($ host, $ user, $ password, $ db) -
if($ this-gt;mysqli-gt;connect_errno !=0){
if($ this-gt;mysqli-gt;connect_errno ==2002)thrownewException("ERROR_HOST") -// Викидаємо виняток, якщо помилка пов`язана з адресою хоста
elseif
($ this-gt;mysqli-gt;connect_errno ==1 044)thrownewException("ERROR_AUTH") -// Викидаємо виняток, якщо помилка пов`язана з ім`ям користувача і паролем
elseif
($ this-gt;mysqli-gt;connect_errno ==+1049)thrownewException("ERROR_DB") -// Викидаємо виняток, якщо помилка пов`язана з назвою бази даних
}
}
}
$ db
=newDataBase() -
try{// "Намагаємося" виконати код
$ db
-gt;connect("Localhost","Root","","Lesson-local") -
echo
"Підключення вдалося"-
}catch(Exception $ e){
/ * У цей блок ми потрапляємо, якщо було викинуто виключення * /
echo $ e
-gt;getMessage() -// Можна замість цього додати if і вивести більш зрозумілу напис, ніж, наприклад, просто ERROR_HOST
}
?gt;

Додам, що ще є і другий параметр у Exception - code. В наведеному вище прикладі ми використовували тільки параметр message. Так само варто відзначити, що при викиданні виключення (тобто при throw new Exception ()), PHP буде шукати перший try-catch. Наприклад, якби метод connect () викликав інший метод, і в цьому б іншому методі було викинуто виключення, то PHP спочатку б шукав try-catch в цій другій методі, потім, не знайшовши його, піднявся б на рівень вище, тобто в метод connect (). Не знайшовши там try-catch, він підніметься ще вище, тобто туди, звідки був викликаний метод connect (), і якщо раптом і там не буде необхідного try-catch, то PHP видасть Warning.

У наступній статті ми розберемо можливість створення своїх власних класів-виключень.

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

Схожі
Function fetch_assoc () on a non-objectFunction fetch_assoc () on a non-object
Ооп проти процедурного підходу.Ооп проти процедурного підходу.
Як зробити коментування на сайтіЯк зробити коментування на сайті
Pdo. Частина 1.Pdo. Частина 1.
Відправлення запитів до бази даних в phpВідправлення запитів до бази даних в php
Оператор придушення помилок в phpОператор придушення помилок в php
Створення винятків в phpСтворення винятків в php
Клас для роботи з базою данихКлас для роботи з базою даних
Шаблон проектування "одинак" (pattern singleton).Шаблон проектування "одинак" (pattern singleton).
Автоматичне резервне копіювання на phpАвтоматичне резервне копіювання на php
» » Винятки в php