Mikä on poikkeus?
Virhe on odottamaton ohjelman tulos, jota ohjelma ei voi itse käsitellä.
Virheet ratkaistaan korjaamalla ohjelma. Esimerkki virheestä on ääretön silmukka, joka ei koskaan lopeta suorittamista.
Poikkeuksena on odottamaton ohjelman tulos, jonka ohjelma voi itse hoitaa.
Esimerkkejä poikkeuksista ovat sellaisen tiedoston avaaminen, jota ei ole olemassa.
Tämä poikkeus voidaan hoitaa joko luomalla tiedosto tai tarjoamalla käyttäjälle mahdollisuus etsiä tiedostoa.
Tässä opetusohjelmassa opit-
- Miksi käsitellä poikkeusta?
- PHP-virheiden käsittely
- Virhe esimerkkien käsittelyssä
- Ero virheiden ja poikkeuksen välillä
- Useita poikkeuksia
- Testataan koodia
Miksi käsitellä poikkeusta?
- Vältä odottamattomia tuloksia sivuillamme, jotka voivat olla erittäin ärsyttäviä tai ärsyttäviä loppukäyttäjillemme
- Paranna sovellusten turvallisuutta olemalla paljastamatta tietoja, joita haitalliset käyttäjät voivat käyttää hyökkäämään sovelluksiimme
- Php-poikkeuksia käytetään muuttamaan ohjelman normaalia kulkua, jos tapahtuu ennustettavissa olevaa virhettä.
PHP-virheiden käsittely
Kun tapahtuu virhe, kokoonpanon asetuksista riippuen, PHP näyttää virheilmoituksen verkkoselaimessa, jossa on tietoja tapahtuneesta virheestä.
PHP tarjoaa useita tapoja käsitellä virheitä.
Tarkastelemme kolmea (3) yleisesti käytettyä menetelmää;
- Die-lauseet - die-toiminto yhdistää kaiun ja poistumisen toiminnon yhdessä. Se on erittäin hyödyllinen, kun haluamme lähettää viestin ja lopettaa komentosarjan suorittamisen virheen sattuessa.
- Mukautetut virheenkäsittelijät - nämä ovat käyttäjän määrittämiä toimintoja, joita kutsutaan aina, kun tapahtuu virhe.
- PHP-virheraportointi - virhesanoma riippuen PHP-virheraportointiasetuksista. Tämä menetelmä on erittäin hyödyllinen kehitysympäristössä, kun sinulla ei ole aavistustakaan, mikä aiheutti virheen. Näytetyt tiedot voivat auttaa sovelluksen virheenkorjauksessa.
Virhe esimerkkien käsittelyssä
Katsotaan nyt joitain yksinkertaisia esimerkkejä virheiden käsittelystä.
Oletetaan, että olemme kehittäneet sovelluksen, joka käyttää tekstitiedostoja tietojen tallentamiseen. Voisimme ehkä tarkistaa tiedoston olemassaolon ennen kuin yritämme lukea tietoja siitä.
Alla oleva koodi toteuttaa yllä olevan esimerkin.
Olettaen, että olet tallentanut tiedoston simple_error.php phptuts-kansioon, avaa URL-osoite http: //localhost/phptuts/simple_error.php
Saat seuraavat tulokset
Kuten yllä olevista tuloksista näet, se saa sovelluksemme näyttämään epäammattimaiselta ja voi olla ärsyttävää käyttäjälle.
Muutamme yllä olevaa koodia ja kirjoitamme virheenkäsittelijän sovellukselle
Jos olet tallentanut yllä olevan koodin nimellä error_handling.php, avaa URL-osoite http: //localhost/phptuts/error_handling.php
Huomaa: on hyvä turvallisuustapa näyttää viesti yllä esitetyllä tavalla sen sijaan, että näytetään viesti, kuten "Tiedostoa ei löydy".
Katsotaanpa toinen esimerkki, joka käyttää mukautettua virhekäsittelijää.
Mukautettu virheenkäsittelijä asetetaan oletukseksi PHP-virheenkäsittelytoiminnoksi, ja se näyttää periaatteessa virheen numeron ja viestin.
Alla oleva koodi kuvaa yllä olevan esimerkin toteutusta
Avaa URL-osoite http: //localhost/phptuts/custom_error_handler.php. Saat seuraavat tulokset
.
Kuten yllä olevasta esimerkistä näet, mukautetut virheenkäsittelijät ovat siinä mielessä tehokkaita
- Niiden avulla voimme mukauttaa virheilmoituksia.
- Mukautettu virheenkäsittelijä voi sisältää myös virheiden kirjaamisen tiedostoon / tietokantaan, sähköpostin lähettämisen kehittäjälle jne.
Katsotaan nyt nyt kolmannen tyyppistä virheenkäsittelyä. Käytämme sisäänrakennettua PHP-toimintoa error_reporting. Sillä on seuraava perussyntaksi
TÄSSÄ,
- “Error_reporting” on PHP-virheilmoitustoiminto
- "$ Report_level" on valinnainen, sitä voidaan käyttää raportointitason asettamiseen. Jos raportointitasoa ei ole määritetty, PHP käyttää oletusvirheraportointitasoa, joka on määritelty php.ini-tiedostossa.
Raportointitaso | Kuvaus | Esimerkki |
---|---|---|
VAROITUS | Näyttää vain varoitusviestit. Ei pysäytä komentosarjan suorittamista | virheilmoitus (E_VAROITUS); |
E_NOTICE | Näyttää ilmoituksia, joita voi esiintyä ohjelman normaalin suorituksen aikana tai jotka voivat olla virheitä. | virheilmoitus (E_ ILMOITUS); |
E_USER_ERROR | Näyttää käyttäjän luomat virheet eli mukautetun virheenkäsittelijän | virheilmoitus (E_ USER_ERROR); |
E_USER_WARNING | Näyttää käyttäjän luomat varoitusviestit | virheilmoitus (E_USER_WARNING); |
E_USER_NOTICE | Näyttää käyttäjän luomat ilmoitukset | virheilmoitus (E_USER_NOTICE); |
E_RECOVERABLE_ERROR | Näyttää virheet, jotka eivät ole kohtalokkaita ja jotka voidaan käsitellä mukautetuilla virhekäsittelijöillä | virheilmoitus (E_RECOVERABLE_ERROR); |
E_ALL | Näyttää kaikki virheet ja varoitukset | virheilmoitus (E_ ALL); |
Ero virheiden ja poikkeuksen välillä
- Poikkeukset heitetään ja on tarkoitus saada kiinni, kun taas virheitä ei yleensä voida korjata.
-
Poikkeuksia käsitellään olio-suuntautuneella tavalla.
Tämä tarkoittaa, kun poikkeus heitetään; luodaan poikkeusobjekti, joka sisältää poikkeustiedot.
Alla olevassa taulukossa esitetään poikkeusobjektimenetelmät
Menetelmä | Kuvaus | Esimerkki |
---|---|---|
getMessage () | Näyttää poikkeuksen viestin |
getMessage();?> |
Hanki koodi() | Näyttää numerokoodin, joka edustaa poikkeusta |
getCode();?> |
getFile () | Näyttää tiedoston nimen ja polun, jossa poikkeus tapahtui |
getFile();?> |
getLine () | Näyttää rivinumeron, jossa poikkeus tapahtui |
getLine();?> |
getTrace () | Näyttää taaksepäin jäljitelmän ennen poikkeusta |
getTrace());?> |
getPrevious () | Näyttää edellisen poikkeuksen ennen nykyistä poikkeusta |
getPrevious();?> |
getTraceAsString () | Näyttää poikkeuksen taaksepäin merkkijonon matriisin sijaan |
getTraceAsString();?> |
__toString () | Näyttää koko poikkeuksen merkkijonona |
__toString();?> |
Alla on perussyntaksi poikkeuksen heittämiseen.
TÄSSÄ,
- "Heittää" on avainsana, jolla heitetään poikkeus
- "New Exception (…)" luo poikkeusobjektin ja välittää viestiparametriksi merkkijonon "Tämä on poikkeusesimerkki".
Yllä oleva koodi antaa seuraavan viestin.
Etsimme nyt esimerkkiä, joka toteuttaa heitto- ja saalispoikkeukset.
Muutamme yllä olevaa esimerkkiä ja sisällytämme kokeilun, heiton ja kiinnioton.
Sillä on seuraava perussyntaksi.
TÄSSÄ,
- “Try {…}” on suoritettava koodilohko, joka saattaa aiheuttaa poikkeuksen
- “Catch (Exception $ e) {…}” on koodilohko, joka tarttuu heitettyyn poikkeukseen ja määrittää poikkeusobjektin muuttujalle $ e.
Alla oleva koodi näyttää peruspoikkeusesimerkin kokeilun, heiton ja kiinnioton poikkeuksen kanssa.
Ohjelma heittää tarkoituksella poikkeuksen, jonka se sitten saa kiinni.
getMessage();echo "";echo "getCode(): " . $e->getCode();echo "";echo "__toString(): " . $e->__toString();}?>
Avaa URL-osoite http: //localhost/phptuts/exception_handling.php Saat seuraavat tulokset.
On myös mahdollista luoda useita poikkeuksia yhdelle php try -lausekkeelle riippuen heitetyn poikkeuksen tyypistä.
Katso artikkeli MySQL: stä, PHP-tietojen käytöstä
… Esimerkkejä useista poikkeuksistaUseita poikkeuksia
Useissa poikkeuksissa käsitellään heitettyjä poikkeuksia käyttämällä useita kokeilulohkoja. Useat poikkeukset ovat hyödyllisiä, kun;
- Haluat näyttää mukautetun viestin heitetyn poikkeuksen mukaan
- Haluat suorittaa ainutlaatuisen toiminnon heitetyn poikkeuksen mukaan
Alla oleva vuokaavio kuvaa kuinka monet poikkeukset toimivat
Katsotaanpa esimerkkiä, joka käyttää useita poikkeuksia.
Me muokkaamme koodia, joka jakaa numeron syötetyllä nimittäjällä.
Odotamme kahdenlaisia poikkeuksia;
- Nollalla jakaminen
- Jako negatiivisella luvulla
Yksinkertaisuuden vuoksi näytämme poikkeustyypin vain saalislohkoissamme.
Exception-luokan sisäänrakennettua PHP: tä käytetään poikkeusten heittämiseen.
Luomme kaksi luokkaa, jotka laajentavat poikkeusluokkaa ja käyttävät niitä heittämään poikkeuksia.
Alla oleva koodi näyttää toteutuksen.
Testataan koodia
Oletetaan, että olet tallentanut multiple_exceptions.php: n phptuts-kansioon.
Selaa URL-osoitteeseen http: //localhost/phptuts/multiple_exceptions.php
Vaihda takaisin PHP-tiedostoon ja välitä -1 parametrina seuraavan kaavion mukaisesti.
Selaa URL-osoitteeseen http: //localhost/phptuts/multiple_exceptions.php .
Mitä tuloksia saat? Pass 3 parametrina.
Mitä tuloksia saat?
Yhteenveto
- Virheet ovat odottamattomia tuloksia, jotka tuottaa PHP-koodi
- Virheiden käsittely parantaa sovelluksen suorituskykyä
- PHP: ssä on sisäänrakennettuja toimintoja, joiden avulla voidaan mukauttaa tapaa, jolla PHP ilmoittaa virheistä
- Poikkeukset ovat kuin virheitä, mutta ne voidaan saada kiinni salpalohkosta heitettäessä.
- Virhetietoja näyttävien virheilmoitusten näyttämistä pidetään huonoina tietoturvakäytäntöinä.