PHP:
Virheiden käsittely

Miten:

PHP:ssä voit hallita virheitä käyttämällä try-catch-lohkoja, ja voit mukauttaa prosessia omien virhekäsittelijöiden ja poikkeusten avulla.

// Perus try-catch esimerkki
try {
  // Tee jotain riskialtista
  $file = fopen("olematontiedosto.txt", "r");
} catch (Exception $e) {
  // Käsittele virhe
  echo "Virhe: " . $e->getMessage();
}

// Aseta oma virhekäsittelijä
set_error_handler(function($severity, $message, $file, $line) {
  throw new ErrorException($message, 0, $severity, $file, $line);
});

// Käyttämällä poikkeuksia
class MyException extends Exception {}

try {
  // Tee jotain ja heitä oma poikkeus
  throw new MyException("Mukautettu virhe!");
} catch (MyException $e) {
  // Käsittele mukautettu poikkeus
  echo $e->getMessage();
}

// Esimerkkituloste:
// Virhe: fopen(olematontiedosto.txt): ei onnistu avaamaan virtaa: Tiedostoa tai hakemistoa ei ole
// Mukautettu virhe!

Syväluotaus

Aikaisemmin PHP-virheet olivat enemmän varoituksia ja huomautuksia, jotka eivät pysäyttäneet skriptin suorittamista. Kielen kehittyessä se omaksui robustimman oliopohjaisen virhekäsittelyn Exception-luokan kautta, joka otettiin käyttöön PHP 5:ssä. Myöhemmin PHP 7 toi Error-luokat, jotka viimein erottelivat virheet ja poikkeukset toisistaan.

Ennen try-catch-lohkoja PHP käytti set_error_handler()-funktiota virheiden käsittelyyn. try-catch on siistimpi, modernimpi. Mutta omilla virhekäsittelijöillä on edelleen sijansa, erityisesti vanhan koodin kanssa tai silloin, kun tarvitsee ottaa kiinni sellaiset virheet, jotka eivät normaalisti ole poikkeuksia.

PHP 7+:n Throwable-rajapinta tarkoittaa, että olipa kyseessä Error tai Exception, voit nyt ottaa kiinni molemmat. Tämä on kätevää, koska nyt et missaa kriittisiä suoritusaikaisia virheitä, joita oli aiemmin vaikeampi jäljittää.

Vaihtoehtoja PHP:n sisäänrakennetun mekanismin ulkopuolella sisältävät kirjastot ja kehykset, jotka tulevat oman virhekäsittelyjärjestelmän kanssa, tarjoten lisäominaisuuksia kuten virhelokien kirjaamista tiedostoihin tai käyttäjäystävällisten virhesivujen näyttämistä.

Katso myös