Какво е изключение?
Грешката е неочакван резултат на програмата, който не може да бъде обработен от самата програма.
Грешките се решават чрез поправяне на програмата. Пример за грешка би бил безкраен цикъл, който никога не спира да се изпълнява.
Изключение е неочакваният резултат на програмата, който може да бъде обработен от самата програма.
Примерите за изключение включват опит за отваряне на файл, който не съществува.
Това изключение може да бъде обработено чрез създаване на файла или представяне на потребителя с опция за търсене на файла.
В този урок ще научите -
- Защо да се справя с изключение?
- Обработка на грешки в PHP
- Грешка при обработката на примери
- Разлика между грешки и изключения
- Множество изключения
- Тестване на кода
Защо да се справя с изключение?
- Избягвайте неочаквани резултати на нашите страници, които могат да бъдат много досадни или дразнещи за нашите крайни потребители
- Подобрете сигурността на нашите приложения, като не излагате информация, която злонамерените потребители могат да използват, за да атакуват нашите приложения
- Изключенията на Php се използват за промяна на нормалния поток на програма, ако възникне някаква предсказуема грешка.
Обработка на грешки в PHP
Когато възникне грешка, в зависимост от настройките на вашата конфигурация, PHP показва съобщението за грешка в уеб браузъра с информация, свързана с възникналата грешка.
PHP предлага редица начини за справяне с грешки.
Ще разгледаме три (3) често използвани метода;
- Измервания на матрицата - функцията на матрицата комбинира ехо и изходна функция в едно. Много е полезно, когато искаме да изведем съобщение и да спрем изпълнението на скрипта, когато възникне грешка.
- Персонализирани манипулатори на грешки - това са дефинирани от потребителя функции, които се извикват всеки път, когато възникне грешка.
- Отчитане на грешки в PHP - съобщението за грешка в зависимост от настройките ви за докладване на грешки в PHP Този метод е много полезен в среда за разработка, когато нямате представа какво е причинило грешката. Показваната информация може да ви помогне да отстраните грешки в приложението си.
Грешка при обработката на примери
Нека сега разгледаме някои прости примери с процедури за обработка на грешки.
Да предположим, че сме разработили приложение, което използва текстови файлове за съхраняване на данни. Може да поискаме да проверим съществуването на файла, преди да се опитаме да прочетем данни от него.
Кодът по-долу реализира горния пример.
Ако приемем, че сте запазили файла simple_error.php в папката phptuts, отворете URL адреса http: //localhost/phptuts/simple_error.php
Ще получите следните резултати
Както можете да видите от горните резултати, това прави приложението ни да изглежда непрофесионално и може да досажда на потребителя.
Ще модифицираме горния код и ще напишем манипулатор на грешки за приложението
Ако приемем, че сте запазили горния код като error_handling.php, отворете URL адреса http: //localhost/phptuts/error_handling.php
Забележка: добра практика за защита е да се показва съобщение като показаното по-горе, вместо да се показва съобщението като „Файлът не е намерен“.
Нека разгледаме друг пример, който използва персонализиран манипулатор на грешки.
Персонализираният манипулатор на грешки ще бъде зададен като функция за обработка на грешки по подразбиране по PHP и ще показва основно номер и съобщение за грешка.
Кодът по-долу илюстрира изпълнението на горния пример
Отворете URL http: //localhost/phptuts/custom_error_handler.php ще получите следните резултати
.
Както можете да видите от горния пример, персонализираните манипулатори на грешки са мощни в смисъл, че
- Те ни позволяват да персонализираме съобщенията за грешки.
- Персонализираният манипулатор на грешки може също да включва регистриране на грешки във файл / база данни, изпращане на имейл до разработчика и т.н.
Нека сега разгледаме третия тип обработка на грешки. Ще използваме PHP вградената функция error_reporting функция. Той има следния основен синтаксис
ТУК,
- “Error_reporting” е функцията за отчитане на грешки в PHP
- „$ Report_level" е по избор, може да се използва за задаване на ниво на отчитане. Ако не е посочено ниво на отчитане, PHP ще използва стандартното ниво на отчитане на грешки, както е посочено във файла php.ini.
Ниво на отчитане | Описание | Пример |
---|---|---|
E_ ПРЕДУПРЕЖДЕНИЕ | Показва само предупредителни съобщения. Не спира изпълнението на скрипта | докладване за грешка (E_WARNING); |
E_NOTICE | Показва известия, които могат да възникнат по време на нормално изпълнение на програма или може да са грешка. | докладване за грешка (E_ ЗАБЕЛЕЖКА); |
E_USER_ERROR | Показва генерирани от потребителя грешки, т.е. потребителски манипулатор на грешки | докладване за грешка (E_ USER_ERROR); |
E_USER_WARNING | Показва предупредителни съобщения, генерирани от потребителя | докладване за грешка (E_USER_WARNING); |
E_USER_NOTICE | Показва известия, генерирани от потребителя | докладване за грешка (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Показва грешка, която не е фатална и може да бъде обработена с помощта на персонализирани манипулатори на грешки | докладване за грешка (E_RECOVERABLE_ERROR); |
E_ALL | Показва всички грешки и предупреждения | докладване за грешка (E_ ALL); |
Разлика между грешки и изключения
- Изключенията се изхвърлят и са предназначени да бъдат уловени, докато грешките обикновено са непоправими.
-
Изключенията се обработват по обектно ориентиран начин.
Това означава, когато се хвърли изключение; създава се обект на изключение, който съдържа подробности за изключението.
Таблицата по-долу показва методите за обект на изключение
Метод | Описание | Пример |
---|---|---|
getMessage () | Показва съобщението на изключението |
getMessage();?> |
Вземи код() | Показва числовия код, който представлява изключението |
getCode();?> |
getFile () | Показва името на файла и пътя, където е възникнало изключението |
getFile();?> |
getLine () | Показва номера на реда, където е възникнало изключението |
getLine();?> |
getTrace () | Показва масив от обратната следа преди изключението |
getTrace());?> |
getPrevious () | Показва предишното изключение преди текущото |
getPrevious();?> |
getTraceAsString () | Показва обратната следа на изключението като низ вместо масив |
getTraceAsString();?> |
__toString () | Показва цялото изключение като низ |
__toString();?> |
По-долу е даден основният синтаксис за създаване на изключение.
ТУК,
- “Хвърляне” е ключовата дума, използвана за хвърляне на изключението
- „New Exception (...)“ създава обект на изключение и предава като параметър на съобщението низ „Това е пример за изключение“.
Горният код извежда следното съобщение.
Сега ще разгледаме пример, който реализира изключенията хвърляне и улов.
Ще модифицираме горния пример и ще включим опит, хвърляне и улов.
Той има следния основен синтаксис.
ТУК,
- „Try {…}“ е блокът от код, който трябва да бъде изпълнен и който потенциално може да предизвика изключение
- “Catch (Exception $ e) {…}” е блока от код, който улавя хвърленото изключение и присвоява обекта на изключение на променливата $ e.
Кодът по-долу показва основния пример за изключение с реализирано изключение try, throw и catch.
Програмата умишлено изхвърля изключение, което след това улавя.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Отворете URL адреса http: //localhost/phptuts/exception_handling.php Ще получите следните резултати.
Възможно е също така да се създадат множество изключения за един php try оператор в зависимост от вида на хвърленото изключение.
Вижте статията за MySQL, PHP достъп до данни
... за примери за изпълнение на множество изключенияМножество изключения
Множество изключения използват многократни блокове за улов за обработка на хвърлените изключения. Множество изключения са полезни, когато;
- Искате да покажете персонализирано съобщение в зависимост от хвърленото изключение
- Искате да извършите уникална операция в зависимост от хвърленото изключение
Диаграмата по-долу илюстрира как работят множество изключения
Нека разгледаме пример, който използва множество изключения.
Ще модифицираме кода, който разделя число на подадения в знаменател.
Очакваме да възникнат два вида изключения;
- Деление на нула
- Деление на отрицателно число
За по-голяма простота ще покажем само типа изключение в нашите блокове за улов.
Вграденият в клас изключения PHP се използва за изхвърляне на изключения.
Ще създадем два класа, които разширяват класа на изключенията и ще ги използваме за изхвърляне на изключения.
Кодът по-долу показва изпълнението.
Тестване на кода
Ще приемем, че сте запазили multiple_exceptions.php в папката phptuts.
Прегледайте URL адреса http: //localhost/phptuts/multiple_exceptions.php
Върнете се обратно към PHP файла и предайте -1 като параметър, както е показано на следващата диаграма.
Прегледайте URL адреса http: //localhost/phptuts/multiple_exceptions.php .
Какви резултати получавате? Предайте 3 като параметър.
Какви резултати получавате?
Обобщение
- Грешките са неочаквани резултати, получени от PHP код
- Обработката на грешки подобрява производителността на приложението
- PHP има вградени функции, които могат да се използват за персонализиране на начина, по който PHP съобщава за грешки
- Изключенията са като грешки, но те могат да бъдат уловени, като се използва блокът catch, когато се хвърлят.
- Показването на съобщения за грешки, които показват информация за грешка, се счита за лоша практика на защита.