PHP Pabandykite sugauti pavyzdį: Išimtis & Klaida tvarkant mokymo programą

Kas yra išimtis?

Klaida yra netikėtas programos rezultatas, kurio pati programa negali apdoroti.

Klaidos pašalinamos pataisant programą. Klaidos pavyzdys būtų begalinis ciklas, kuris niekada nenustoja vykdyti.

Išimtis yra netikėtas programos rezultatas, kurį gali atlikti pati programa.

Išimčių pavyzdžiai yra bandymas atidaryti neegzistuojantį failą.

Ši išimtis gali būti padaryta sukuriant failą arba pateikiant vartotojui galimybę ieškoti failo.

Šioje pamokoje sužinosite

  • Kodėl verta elgtis su išimtimi?
  • PHP klaidų tvarkymas
  • Klaida tvarkant pavyzdžius
  • Skirtumas tarp klaidų ir išimčių
  • Daugybė išimčių
  • Testuojamas kodas

Kodėl verta elgtis su išimtimi?

  • Venkite netikėtų rezultatų mūsų puslapiuose, kurie gali labai erzinti ar erzinti mūsų galutinius vartotojus
  • Pagerinkite mūsų programų saugumą neatskleisdami informacijos, kurią kenkėjiški vartotojai gali naudoti mūsų programoms atakuoti
  • PHP išimtys naudojamos norint pakeisti įprastą programos eigą, jei įvyksta nuspėjama klaida.

PHP klaidų tvarkymas

Kai įvyksta klaida, atsižvelgiant į jūsų konfigūracijos parametrus, PHP žiniatinklio naršyklėje pateikia klaidos pranešimą su informacija apie įvykusią klaidą.

PHP siūlo daugybę būdų, kaip tvarkyti klaidas.

Mes apžvelgsime tris (3) dažniausiai naudojamus metodus;

  1. Die die teiginiai - die funkcija sujungia aido ir išėjimo funkciją viename. Tai labai naudinga, kai norime išsiųsti pranešimą ir sustabdyti scenarijaus vykdymą, kai įvyksta klaida.
  2. Pasirinktiniai klaidų tvarkytuvai - tai vartotojo nustatytos funkcijos, kurios iškviečiamos, kai įvyksta klaida.
  3. PHP klaidų ataskaitos - klaidos pranešimas, atsižvelgiant į jūsų PHP klaidų ataskaitų nustatymus. Šis metodas yra labai naudingas kūrimo aplinkoje, kai neįsivaizduojate, kas sukėlė klaidą. Rodoma informacija gali padėti derinti jūsų programą.

Klaida tvarkant pavyzdžius

Pažvelkime į keletą paprastų klaidų tvarkymo pavyzdžių.

Tarkime, kad mes sukūrėme programą, kuri naudoja tekstinius failus duomenims saugoti. Prieš bandydami nuskaityti iš jo duomenis, galbūt norime patikrinti, ar failas egzistuoja.

Žemiau pateiktas kodas įgyvendina aukščiau pateiktą pavyzdį.


Darant prielaidą, kad failą simple_error.php išsaugojote „phptuts“ aplanke, atidarykite URL http: //localhost/phptuts/simple_error.php

Gausite šiuos rezultatus

Kaip matote iš pirmiau pateiktų rezultatų, tai daro mūsų programą neprofesionalią ir gali erzinti vartotoją.

Mes pakeisime aukščiau nurodytą kodą ir parašysime klaidų tvarkytuvą programai


Darant prielaidą, kad pirmiau nurodytą kodą išsaugojote kaip error_handling.php, atidarykite URL http: //localhost/phptuts/error_handling.php

Pastaba: gera saugumo praktika yra rodyti pranešimą kaip parodyta aukščiau, o ne rodyti tokį pranešimą kaip „Failas nerastas“.

Pažvelkime į kitą pavyzdį, kuriame naudojamas pasirinktinis klaidų tvarkytuvas.

Pasirinktinis klaidų tvarkytuvas bus nustatytas kaip numatytoji PHP klaidų tvarkymo funkcija ir iš esmės parodys klaidos numerį ir pranešimą.

Žemiau pateiktas kodas parodo aukščiau pateikto pavyzdžio įgyvendinimą


Atidarykite URL http: //localhost/phptuts/custom_error_handler.php. Gausite šiuos rezultatus

.

Kaip matote iš pirmiau pateikto pavyzdžio, pasirinktiniai klaidų tvarkytuvai yra galingi ta prasme

  • Jie leidžia mums pritaikyti klaidų pranešimus.
  • Pasirinktinis klaidų tvarkytuvas taip pat gali apimti klaidų registravimą faile / duomenų bazėje, el. Laiškų siuntimą kūrėjui ir kt.

Dabar pažvelkime į trečiąjį klaidų tvarkymo tipą. Mes naudosime integruotą PHP funkciją „error_reporting“ funkcija. Ji turi tokią pagrindinę sintaksę


ČIA

  • „Error_reporting“ yra PHP pranešimų apie klaidas funkcija
  • „$ Report_level“ yra neprivalomas, gali būti naudojamas ataskaitų lygiui nustatyti. Jei nenurodytas ataskaitų teikimo lygis, PHP naudos numatytąjį klaidų ataskaitų lygį, kaip nurodyta faile php.ini.
Ataskaitų teikimo lygis apibūdinimas Pavyzdys
ĮSPĖJIMAS Rodomi tik įspėjamieji pranešimai. Nenutraukia scenarijaus vykdymo Pranešimas apie klaidą (ĮSPĖJIMAS);
E_NOTICE Rodomi pranešimai, kurie gali atsirasti vykdant įprastą programą arba gali būti klaida. Pranešimas apie klaidą (E_ PASTABA);
E_USER_ERROR Rodo vartotojo sukurtas klaidas, ty pasirinktinį klaidų tvarkytuvą pranešimas apie klaidą (E_ USER_ERROR);
E_USER_WARNING Rodomi vartotojo sugeneruoti įspėjamieji pranešimai Pranešimas apie klaidą (E_USER_WARNING);
„E_USER_NOTICE“ Rodomi vartotojo sugeneruoti pranešimai Pranešimas apie klaidą (E_USER_NOTICE);
E_RECOVERABLE_ERROR Rodo klaidas, kurios nėra mirtinos ir kurias galima pašalinti naudojant pasirinktinius klaidų tvarkytuvus pranešimas apie klaidą (E_RECOVERABLE_ERROR);
E_ALL Rodomos visos klaidos ir įspėjimai pranešimas apie klaidą (E_ ALL);

Skirtumas tarp klaidų ir išimčių

  • Išimtys yra išmetamos ir ketinamos sugauti, o klaidos paprastai neištaisomos.
  • Išimtys tvarkomos objektu.

    Tai reiškia, kai išmetama išimtis; sukuriamas išimties objektas, kuriame yra išsami informacija apie išimtį.

Žemiau esančioje lentelėje parodyti išimties objekto metodai

Metodas apibūdinimas Pavyzdys
„getMessage“ () Rodomas išimties pranešimas
getMessage();?>
gauti kodą() Rodomas skaitmeninis kodas, nurodantis išimtį
getCode();?>
„getFile“ () Rodo failo pavadinimą ir kelią, kuriame įvyko išimtis
getFile();?>
„getLine“ () Rodo eilutės numerį, kuriame įvyko išimtis
getLine();?>
„getTrace“ () Prieš išimtį rodo atgalinio kelio masyvą
getTrace());?>
getPrevious () Rodo ankstesnę išimtį prieš dabartinę
getPrevious();?>
getTraceAsString () Išimties atgalinį pėdsaką rodo kaip eilutę, o ne masyvą
getTraceAsString();?>
__toString () Rodo visą išimtį kaip eilutę
__toString();?>

Žemiau pateikiama pagrindinė išimties sintaksė.


ČIA

  • „Mesti“ yra raktinis žodis, naudojamas metant išimtį
  • „Nauja išimtis (…)“ sukuria išimties objektą ir pranešimo parametru perduoda eilutę „Tai yra išimties pavyzdys“.

Aukščiau pateiktas kodas pateikia šį pranešimą.

Dabar mes ieškosime pavyzdžio, įgyvendinančio metimo ir gaudymo išimtis.

Mes pakeisime aukščiau pateiktą pavyzdį ir įtrauksime bandymą, metimą ir gaudymą.

Ji turi tokią pagrindinę sintaksę.


ČIA

  • „Try {…}“ yra vykdomasis kodas, galintis sukelti išimtį
  • „Catch (Exception $ e) {…}“ yra kodo blokas, kuris sugauna išmetamą išimtį ir priskiria išimties objektą kintamajam $ e.

Žemiau pateiktas kodas rodo pagrindinį išimties pavyzdį su išimties bandymo, metimo ir gaudymo išimtimi.

Programa sąmoningai išmeta išimtį, kurią tada sugauna.

getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>

Atidarykite URL adresą : http: //localhost/phptuts/exception_handling.php. Gausite šiuos rezultatus.

Taip pat galima sukurti kelias išimtis vienam php try sakiniui, atsižvelgiant į išimties tipą.

Žr. Straipsnį apie „MySQL“, PHP prieigą prie duomenų

... daugelio išimčių įgyvendinimo pavyzdžiai

Daugybė išimčių

Keletas išimčių naudokite kelis bandymo gaudymo blokus, kad tvarkytumėte išmestas išimtis. Kelios išimtys yra naudingos, kai;

  • Norite rodyti pritaikytą pranešimą, atsižvelgiant į išmetamą išimtį
  • Norite atlikti unikalią operaciją, atsižvelgiant į išmetamą išimtį

Žemiau esanti schema parodo, kaip veikia kelios išimtys

Pažvelkime į pavyzdį, kuriame naudojamos kelios išimtys.

Pakeisime kodą, padalijantį skaičių iš perduoto vardiklio.

Mes tikimės dviejų rūšių išimčių;

  • Dalyba iš nulio
  • Padalijimas iš neigiamo skaičiaus

Kad būtų paprasčiau, išimties tipą rodysime tik savo sugavimo blokuose.

Išimčių klasėje naudojamas PHP, sukurtas išimčių klasėje.

Mes sukursime dvi klases, kurios išplės išimčių klasę ir panaudos jas metant išimtis.

Žemiau pateiktas kodas rodo įgyvendinimą.

 

Testuojamas kodas

Manysime, kad išsaugojote multiple_exceptions.php aplanke phptuts.

Naršykite iki URL http: //localhost/phptuts/multiple_exceptions.php

Perjunkite atgal į PHP failą ir pereikite -1 kaip parametrą, kaip parodyta šioje diagramoje.

Naršykite iki URL : http: //localhost/phptuts/multiple_exceptions.php .

Kokių rezultatų jūs gaunate? Perduokite 3 kaip parametrą.

Kokių rezultatų jūs gaunate?

Santrauka

  • Klaidos yra netikėti rezultatai, kuriuos sukuria PHP kodas
  • Klaidų tvarkymas pagerina programos našumą
  • PHP turi įmontuotas funkcijas, kurios gali būti naudojamos norint pritaikyti tai, kaip PHP praneša apie klaidas
  • Išimtys yra panašios į klaidas, tačiau jas išmetus galima pagauti naudojant blokavimo bloką.
  • Klaidų pranešimų, kuriuose rodoma informacija apie klaidas, rodymas laikomas bloga saugumo praktika.

Įdomios straipsniai...