Шта је изузетак?
Грешка је неочекивани резултат програма који сам програм не може да реши.
Грешке се решавају поправљањем програма. Пример грешке била би бесконачна петља која се никада не зауставља у извршавању.
Изузетак су неочекивани резултати програма којима се сам програм може бавити.
Примери изузетака укључују покушај отварања датотеке која не постоји.
Овај изузетак се може решити стварањем датотеке или представљањем кориснику могућности претраживања датотеке.
У овом упутству ћете научити-
- Зашто се бавити изузетком?
- ПХП руковање грешкама
- Грешка при руковању примерима
- Разлика између грешака и изузетака
- Вишеструки изузеци
- Тестирање кода
Зашто се бавити изузетком?
- Избегавајте неочекиване резултате на нашим страницама који могу бити врло досадни или иритантни за наше крајње кориснике
- Побољшајте сигурност наших апликација не излажући информације које злонамерни корисници могу користити за напад на наше апликације
- Пхп изузеци се користе за промену нормалног тока програма ако дође до било какве предвидљиве грешке.
ПХП руковање грешкама
Када се појави грешка, у зависности од ваших подешавања конфигурације, ПХП приказује поруку о грешци у веб прегледачу са информацијама у вези са грешком која се догодила.
ПХП нуди бројне начине за решавање грешака.
Погледаћемо три (3) најчешће коришћене методе;
- Изјаве о умирању - функција умрежавања комбинује ехо и излазну функцију у једном. Веома је корисно када желимо да објавимо поруку и зауставимо извршавање скрипте када се догоди грешка.
- Прилагођени руковаоци грешкама - ово су кориснички дефинисане функције које се позивају кад год се догоди грешка.
- Извештавање о ПХП грешкама - порука о грешци у зависности од подешавања извештавања о ПХП грешкама. Ова метода је врло корисна у развојном окружењу када немате појма шта је узроковало грешку. Приказане информације могу вам помоћи да отклоните грешке у апликацији.
Грешка при руковању примерима
Погледајмо сада неколико једноставних примера са рутинама за руковање грешкама.
Претпоставимо да смо развили апликацију која користи текстуалне датотеке за чување података. Можда ћемо желети да проверимо да ли датотека постоји пре него што покушамо да из ње читамо податке.
Код испод примењује горњи пример.
Под претпоставком да сте датотеку симпле_еррор.пхп сачували у директоријуму пхптутс, отворите УРЛ хттп: //лоцалхост/пхптутс/симпле_еррор.пхп
Добићете следеће резултате
Као што видите из горњих резултата, наша апликација изгледа непрофесионално и може бити досадна кориснику.
Ми ћемо модификовати горњи код и написат ћемо руковалац грешкама за апликацију
Под претпоставком да сте горе наведени код сачували као еррор_хандлинг.пхп, отворите УРЛ хттп: //лоцалхост/пхптутс/еррор_хандлинг.пхп
Напомена: добра је безбедносна пракса приказивање поруке као горе приказана уместо да се приказује порука попут „Датотека није пронађена“.
Погледајмо још један пример који користи прилагођени управљач грешкама.
Прилагођени руковач грешкама биће постављен као подразумевана функција руковања грешкама ПХП-а и у основи ће приказати број грешке и поруку.
Доњи код илуструје примену горњег примера
Отворите УРЛ хттп: //лоцалхост/пхптутс/цустом_еррор_хандлер.пхп и добићете следеће резултате
.
Као што видите из горњег примера, прилагођени руковаоци грешкама су моћни у смислу да
- Омогућавају нам прилагођавање порука о грешкама.
- Прилагођени руковач грешкама такође може да садржи евидентирање грешака у датотеци / бази података, слање е-поште програмеру итд.
Погледајмо сада трећу врсту руковања грешкама. Користићемо уграђену ПХП функцију еррор_репортинг. Има следећу основну синтаксу
ОВДЕ,
- „Еррор_репортинг“ је ПХП функција извештавања о грешкама
- „$ Репорт_левел" није обавезан, може се користити за подешавање нивоа извештавања. Ако није наведен ниво извештавања, ПХП ће користити задати ниво извештавања о грешкама како је наведено у датотеци пхп.ини.
Ниво извештавања | Опис | Пример |
---|---|---|
Е_УПОЗОРЕЊЕ | Приказује само поруке упозорења. Не зауставља извршење скрипте | пријава грешака (Е_УПОЗОРЕЊЕ); |
Е_НОТИЦЕ | Приказује обавештења која се могу појавити током нормалног извршавања програма или могу представљати грешку. | пријава грешке (Е_ ОБАВЕШТЕЊЕ); |
Е_УСЕР_ЕРРОР | Приказује грешке које су генерисали корисници, тј. Прилагођени руковалац грешкама | пријава грешке (Е_ УСЕР_ЕРРОР); |
Е_УСЕР_ВАРНИНГ | Приказује поруке генерисане од корисника | пријава грешака (Е_УСЕР_ВАРНИНГ); |
Е_УСЕР_НОТИЦЕ | Приказује обавештења генерисана од корисника | пријава грешака (Е_УСЕР_НОТИЦЕ); |
Е_РЕЦОВЕРАБЛЕ_ЕРРОР | Приказује грешке које нису фаталне и којима се може руковати помоћу прилагођених руковалаца грешкама | пријава грешке (Е_РЕЦОВЕРАБЛЕ_ЕРРОР); |
Е_АЛЛ | Приказује све грешке и упозорења | пријава грешака (Е_ СВЕ); |
Разлика између грешака и изузетака
- Изузеци се бацају и намеравају да се ухвате, док се грешке углавном не могу поправити.
-
Изузеци се обрађују на објектно оријентисан начин.
То значи када се изузме изузетак; креира се објекат изузетка који садржи детаље изузетка.
Табела у наставку приказује методе објеката изузетака
Метод | Опис | Пример |
---|---|---|
гетМессаге () | Приказује поруку изузетка |
getMessage();?> |
Добиј код() | Приказује нумерички код који представља изузетак |
getCode();?> |
гетФиле () | Приказује име датотеке и путању на којој се догодио изузетак |
getFile();?> |
гетЛине () | Приказује број линије где се догодио изузетак |
getLine();?> |
гетТраце () | Приказује низ повратних трагова пре изузетка |
getTrace());?> |
гетПревиоус () | Приказује претходни изузетак пре тренутног |
getPrevious();?> |
гетТрацеАсСтринг () | Приказује повратну траг изузетка као низ уместо низа |
getTraceAsString();?> |
__тоСтринг () | Приказује цео изузетак као низ |
__toString();?> |
Испод је основна синтакса за избацивање изузетка.
ОВДЕ,
- „Бацити“ је кључна реч која се користи за бацање изузетка
- „Нев Екцептион (…)“ креира објекат изузетка и просљеђује низ „Ово је примјер изузетка“ као параметар поруке.
Горњи код даје следећу поруку.
Сада ћемо погледати пример који примењује изузеће бацања и улова.
Изменићемо горњи пример и укључити покушај, бацање и улов.
Има следећу основну синтаксу.
ОВДЕ,
- „Три {…}“ је блок кода који треба извршити и који потенцијално може створити изузетак
- „Цатцх (Екцептион $ е) {…}“ је блок кода који хвата избачени изузетак и додељује објекат изузетка променљивој $ е.
Доњи код приказује основни пример изузетка са примењеном изузетком три, тхров и цатцх.
Програм намерно баца изузетак који потом ухваћа.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Отворите УРЛ хттп: //лоцалхост/пхптутс/екцептион_хандлинг.пхп Добићете следеће резултате.
Такође је могуће створити више изузетака за једну пхп три изјаву, у зависности од врсте избаченог изузетка.
Погледајте чланак о МиСКЛ, ПХП приступу подацима
... за примере примене вишеструких изузетакаВишеструки изузеци
Вишеструки изузетак користи вишеструке блокове три цатцх да би се бавио избаченим изузецима. Вишеструки изузеци су корисни када;
- Желите да прикажете прилагођену поруку у зависности од избаченог изузетка
- Желите да извршите јединствену операцију у зависности од избаченог изузетка
Дијаграм тока у наставку илуструје како функционишу вишеструки изузеци
Let’s look at an example that uses multiple exceptions.
We will modify the code that divides a number by the passed in denominator.
We expect two types of exceptions to occur;
- Division by zero
- Division by a negative number
For simplicity’s sake, we will only display the exception type in our catch blocks.
The PHP built in Exception class is used to throw exceptions.
We will create two classes that extend the exception class and use them to throw exceptions.
The code below shows the implementation.
Testing the code
We will assume you saved multiple_exceptions.php in phptuts folder.
Browse to the URL http://localhost/phptuts/multiple_exceptions.php
Switch back to the PHP file and pass -1 as the parameter as shown in the following diagram.
Browse to the URL http://localhost/phptuts/multiple_exceptions.php.
Какве резултате добијате? Положите 3 као параметар.
Какве резултате добијате?
Резиме
- Грешке су неочекивани резултати које производи ПХП код
- Руковање грешкама побољшава перформансе апликације
- ПХП има уграђене функције које се могу користити за прилагођавање начина на који ПХП пријављује грешке
- Изузеци су попут грешака, али се могу ухватити помоћу блока цатцх када се баце.
- Приказивање порука о грешкама које приказују информације о грешкама сматра се лошом безбедносном праксом.