Приклад спроби лову PHP: Виняток & Посібник з обробки помилок

Зміст:

Anonim

Що таке виняток?

Помилка - це несподіваний результат програми, який не може бути оброблений самою програмою.

Помилки вирішуються шляхом виправлення програми. Прикладом помилки може бути нескінченний цикл, який ніколи не зупиняється у виконанні.

Винятком є ​​несподіваний результат програми, який може обробити сама програма.

Приклади виключень включають спробу відкрити файл, який не існує.

Цей виняток можна вирішити, створивши файл або надавши користувачеві можливість пошуку файлу.

У цьому підручнику ви дізнаєтесь-

  • Навіщо обробляти винятки?
  • Обробка помилок PHP
  • Помилка обробки прикладів
  • Різниця між помилками та винятками
  • Кілька винятків
  • Тестування коду

Навіщо обробляти винятки?

  • Уникайте несподіваних результатів на наших сторінках, які можуть дуже дратувати або дратувати наших кінцевих користувачів
  • Покращте безпеку наших додатків, не розкриваючи інформацію, яку шкідливі користувачі можуть використовувати для нападу на наші програми
  • Винятки Php використовуються для зміни нормального потоку програми, якщо виникає якась передбачувана помилка.

Обробка помилок PHP

Коли виникає помилка, залежно від налаштувань конфігурації, PHP відображає повідомлення про помилку у веб-браузері з інформацією, що стосується помилки, що сталася.

PHP пропонує ряд способів обробки помилок.

Ми розглянемо три (3) загальновживані методи;

  1. Висловлювання штампа - функція штампа поєднує в собі функцію відлуння та виходу. Це дуже корисно, коли ми хочемо вивести повідомлення та зупинити виконання сценарію, коли виникає помилка.
  2. Спеціальні обробники помилок - це визначені користувачем функції, які викликаються щоразу, коли виникає помилка.
  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_ NOTICE);
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();?>

Нижче наведено основний синтаксис для створення виключення.

ТУТ,

  • “Throw” - це ключове слово, що використовується для викиду винятку
  • “New Exception (…)” створює об’єкт виключення та передає рядок “This is example 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

... для прикладів реалізації численних винятків

Кілька винятків

Кілька винятків використовує кілька спроб блоків catch для обробки викинутих винятків. Кілька винятків корисні, коли;

  • Ви хочете відобразити індивідуальне повідомлення залежно від вибраного винятку
  • Ви хочете виконати унікальну операцію залежно від вибраного винятку

Блок-схема нижче ілюструє, як працюють кілька винятків

Давайте розглянемо приклад, який використовує кілька винятків.

Ми змінимо код, який ділить число на переданий знаменник.

Ми очікуємо, що відбудуться два типи винятків;

  • Ділення на нуль
  • Ділення на від’ємне число

Для простоти ми відображатимемо лише тип винятків у наших блоках catch.

PHP, вбудований у клас Exception, використовується для створення винятків.

Ми створимо два класи, які розширюють клас винятків і використовувати їх для викидів винятків.

У наведеному нижче коді показано реалізацію.

Тестування коду

Будемо вважати, що ви зберегли 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 при киданні.
  • Відображення повідомлень про помилки, які відображають інформацію про помилки, вважається поганою практикою безпеки.