Mis on erand?
Viga on ootamatu programmi tulemus, mida programm ise ei saa hakkama.
Vead lahendatakse programmi parandamisega. Vea näiteks on lõpmatu silmus, mis ei lõpeta kunagi käivitamist.
Erandiks on ootamatu programmi tulemus, millega saab programm ise hakkama.
Erandite hulka kuuluvad faili avamine, mida pole olemas.
Selle erandiga saab hakkama kas faili loomisega või pakkudes kasutajale võimalust faili otsida.
Selles õpetuses saate teada
- Miks käsitleda erandeid?
- PHP tõrkeotsing
- Näidete käitlemisel tekkis viga
- Vigade ja erandite erinevus
- Mitu erandit
- Koodi testimine
Miks käsitleda erandeid?
- Vältige meie lehtedel ootamatuid tulemusi, mis võivad meie lõppkasutajatele olla väga tüütud või ärritavad
- Parandage meie rakenduste turvalisust, paljastamata teavet, mida pahatahtlikud kasutajad võivad meie rakenduste ründamiseks kasutada
- Php-erandeid kasutatakse programmi normaalse voo muutmiseks, kui ilmneb mõni prognoositav viga.
PHP tõrkeotsing
Vea ilmnemisel kuvab PHP sõltuvalt teie konfiguratsiooniseadetest veebibrauseris tõrketeate, mis sisaldab teavet ilmnenud tõrke kohta.
PHP pakub mitmeid võimalusi vigade käsitlemiseks.
Vaatleme kolme (3) tavaliselt kasutatavat meetodit;
- Die avaldused - die funktsioon ühendab kaja ja väljumise funktsiooni ühes. See on väga kasulik, kui soovime tõrke ilmnemisel sõnumi väljastada ja skripti käivitamise peatada.
- Kohandatud veakäitlejad - need on kasutaja määratletud funktsioonid, mida kutsutakse vea ilmnemisel.
- PHP tõrketeade - veateade sõltub teie PHP tõrketeate seadistustest. See meetod on arenduskeskkonnas väga kasulik, kui teil pole aimugi, mis vea põhjustas. Kuvatav teave aitab teil rakendust siluda.
Näidete käitlemisel tekkis viga
Vaatame nüüd mõningaid lihtsaid näiteid vigade käsitsemise rutiinidest.
Oletame, et oleme välja töötanud rakenduse, mis kasutab andmete salvestamiseks tekstifaile. Võiksime enne faili andmete lugemist kontrollida faili olemasolu.
Allolev kood rakendab ülaltoodud näidet.
Eeldades, et olete faili simple_error.php salvestanud kausta phptuts, avage URL http: //localhost/phptuts/simple_error.php
Saad järgmised tulemused
Nagu ülaltoodud tulemustest näha, muudab see meie rakenduse ebaprofessionaalseks ja võib kasutajale tüütu olla.
Muudame ülaltoodud koodi ja kirjutame rakenduse veakäitleja
Eeldades, et olete ülaltoodud koodi salvestanud failina error_handling.php, avage URL http: //localhost/phptuts/error_handling.php
Märkus: hea turvatava on kuvada sõnum ülaltoodud kujul selle asemel, et kuvada sõnumit nagu „Faili ei leitud”.
Vaatame veel ühte näidet, mis kasutab kohandatud veakäitlejat.
Kohandatud veakäitleja seatakse vaikepõhiseks PHP tõrkeotsingu funktsiooniks ja see kuvab põhimõtteliselt vea numbri ja teate.
Allolev kood illustreerib ülaltoodud näite rakendamist
Avage URL http: //localhost/phptuts/custom_error_handler.php. Saate järgmised tulemused
.
Nagu ülaltoodud näitest näha, on kohandatud veakäitlejad selles mõttes võimsad
- Need võimaldavad meil veateateid kohandada.
- Kohandatud veakäitleja võib sisaldada ka tõrke logimist faili / andmebaasi, arendaja e-posti saatmist jne.
Vaatame nüüd kolmandat tüüpi veakäsitlust. Kasutame PHP sisseehitatud funktsiooni error_reporting funktsiooni. Sellel on järgmine põhisüntaks
SIIN,
- “Error_reporting” on PHP vigade aruandluse funktsioon
- „$ Report_level” on valikuline, seda saab kasutada aruandlustaseme määramiseks. Kui aruandlustaset pole määratud, kasutab PHP vaikevea aruandluse taset, nagu on määratletud failis php.ini.
Aruandlustase | Kirjeldus | Näide |
---|---|---|
HOIATUS | Kuvab ainult hoiatusteateid. Ei peata skripti täitmist | veaaruandlus (E-HOIATUS); |
E_NOTICE | Kuvab teateid, mis võivad ilmneda programmi tavapärase käivitamise ajal või võivad olla tõrked. | veaaruandlus (E_ TEATIS); |
E_USER_ERROR | Kuvab kasutaja loodud vead, st kohandatud veakäitleja | veaaruanne (E_ USER_ERROR); |
E_USER_WARNING | Kuvab kasutaja loodud hoiatusteateid | veaaruandlus (E_USER_WARNING); |
E_USER_NOTICE | Kuvab kasutaja loodud teated | veaaruandlus (E_USER_NOTICE); |
E_REMOVERABLE_ERROR | Kuvab vead, mis ei ole surmavad ja mida saab kohandatud veakäitlejate abil käsitseda | veaaruandlus (E_RECOVERABLE_ERROR); |
E_ALL | Kuvab kõik vead ja hoiatused | veaaruandlus (E_ KÕIK); |
Vigade ja erandite erinevus
- Erandeid visatakse ja need on püütud tabada, samas kui vigu ei saa enam parandada.
-
Erandeid käsitletakse objektile suunatud viisil.
See tähendab, kui visatakse erand; luuakse erandi objekt, mis sisaldab erandi üksikasju.
Allolevas tabelis on toodud erandiobjekti meetodid
Meetod | Kirjeldus | Näide |
---|---|---|
getMessage () | Kuvab erandi teate |
getMessage();?> |
getCode () | Kuvab arvukoodi, mis tähistab erandit |
getCode();?> |
getFile () | Kuvab faili nime ja tee, kus erand toimus |
getFile();?> |
getLine () | Kuvab rea numbri, kus erand toimus |
getLine();?> |
getTrace () | Kuvab tagasijooksu massiivi enne erandit |
getTrace());?> |
getPrevious () | Kuvab eelmise erandi enne praegust |
getPrevious();?> |
getTraceAsString () | Kuvab massiivi asemel stringi stringi |
getTraceAsString();?> |
__toString () | Kuvab kogu erandi stringina |
__toString();?> |
Allpool on erandite viskamise põhisüntaks.
SIIN,
- "Visata" on märksõna, mida kasutatakse erandi viskamiseks
- „Uus erand (…)“ loob erandi objekti ja edastab sõnumi parameetriks stringi „See on erandi näide“.
Ülaltoodud kood väljastab järgmise teate.
Vaatame nüüd näidet, mis rakendab viske- ja püüdmiserandeid.
Muudame ülaltoodud näidet ja lisame proovimise, viske ja püüdmise.
Sellel on järgmine põhisüntaks.
SIIN,
- „Try {…}” on käivitatav koodiplokk, mis võib tekitada erandi
- „Catch (Exception $ e) {…}” on koodiplokk, mis püüab visatud erandi ja määrab erandi objekti muutujale $ e.
Allolev kood näitab põhilist erandi näidet, kui rakendatud on proovimise, viskamise ja püüdmise erand.
Programm loob tahtlikult erandi, mille ta siis tabab.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Avage URL http: //localhost/phptuts/exception_handling.php. Saate järgmised tulemused.
Ühe php try lause jaoks on võimalik luua ka mitu erandit, sõltuvalt visatud erandi tüübist.
Vaadake artiklit MySQL, PHP andmetele juurdepääsu kohta
… Mitme erandi rakendamise näidete jaoksMitu erandit
Mitu erandit kasutage visatud erandite käsitlemiseks mitut proovimise püüdmisplokki. Mitu erandit on kasulikud, kui;
- Soovite kuvada kohandatud sõnumit sõltuvalt visatud erandist
- Soovite teha unikaalse toimingu sõltuvalt visatud erandist
Allolev vooskeem illustreerib mitme erandi toimimist
Vaatame näidet, mis kasutab mitut erandit.
Muudame koodi, mis jagab arvu edastatud nimetajaga.
Eeldame, et esineb kahte tüüpi erandeid;
- Nulliga jagamine
- Jagamine negatiivse arvuga
Lihtsuse huvides kuvame eranditüübi ainult oma püüdmisplokkides.
Erandklassi sisseehitatud PHP-d kasutatakse erandite viskamiseks.
Loome kaks klassi, mis laiendavad erandklassi ja kasutavad neid erandite viskamiseks.
Allolev kood näitab rakendust.
Koodi testimine
Oletame, et olete salvestanud multiple_exceptions.php kausta phptuts.
Sirvige URL-i http: //localhost/phptuts/multiple_exceptions.php
Lülitage tagasi PHP-failile ja edastage parameetrina -1, nagu on näidatud järgmisel diagrammil.
Sirvige URL-i http: //localhost/phptuts/multiple_exceptions.php .
Milliseid tulemusi saate? Parameetrina edastage 3.
Milliseid tulemusi saate?
Kokkuvõte
- Vead on PHP-koodi loodud ootamatud tulemused
- Veakäsitlus parandab rakenduse jõudlust
- PHP-s on sisse ehitatud funktsioonid, mida saab kasutada PHP vigadest teatamise viisi kohandamiseks
- Erandid on nagu vead, kuid viskamisel saab neid püüda kinniploki abil.
- Veateavet näitavate veateadete kuvamist peetakse halvaks turvatavadeks.