PHP - Fehlerbehandlung

Hallo da draußen, angehende PHP-Entwickler! Heute tauchen wir ein in die aufregende Welt der Fehlerbehandlung in PHP. Keine Sorge, wenn du neu im Programmieren bist; ich werde dich durch jeden Begriff Schritt für Schritt führen, genau wie ich es in den letzten Jahren für unzählige Schüler getan habe. Also hol dir einen Becher Kaffee (oder dein Lieblingsgetränk) und los geht's!

PHP - Error Handling

Die die() Funktion

Lassen wir mit einer einfachen, aber mächtigen Funktion beginnen: die(). Diese Funktion ist wie ein Not-Aus-Schalter in deinem Code. Wenn PHP auf die() trifft, stoppt es sofort die Ausführung und gibt eine Nachricht aus.

Hier ist ein einfaches Beispiel:

<?php
$file = fopen("wichtige_datei.txt", "r");
if (!$file) {
die("Oh nein! Die Datei konnte nicht geöffnet werden.");
}
echo "Wenn du das siehst, wurde die Datei erfolgreich geöffnet!";
?>

In diesem Code versuchen wir, eine Datei zu öffnen. Wenn es nicht klappt, stoppt die() alles und zeigt unsere Nachricht an. Es ist, als würde man PHP sagen: "Wenn du das nicht kannst, hör einfach auf und lass es mich wissen!"

Die Fehlerbehandlungs-Funktion

Nun skalieren wir unser Fehlerbehandlungsspiel mit einer benutzerdefinierten Fehlerbehandlungsfunktion. Das ist wie ein eigener persönlicher Assistent, der Fehler für dich erledigt.

So erstellst du eine:

<?php
function meineFehlerbehandlung($errno, $errstr, $errfile, $errline) {
echo "<b>Ups! Etwas ist schiefgelaufen:</b><br>";
echo "Fehler: [$errno] $errstr<br>";
echo "Fehler in Zeile $errline in $errfile<br>";
}

set_error_handler("meineFehlerbehandlung");

// Lassen wir einen Fehler auslösen
echo($undefinierte_variable);
?>

In diesem Beispiel haben wir eine Funktion namens meineFehlerbehandlung erstellt, die detaillierte Informationen über jeden aufgetretenen Fehler bietet. Wir sagen PHP dann, dass es diese Funktion mit set_error_handler() verwenden soll. Wenn wir versuchen, eine undefinierte Variable auszugeben, springt unsere benutzerdefinierte Fehlerbehandlung ein und bietet eine freundliche und informative Nachricht.

Die ArithmeticError Klasse

PHP 7 führte mehrere neue Fehlerklassen ein, einschließlich ArithmeticError. Diese Klasse wird ausgelöst, wenn während einer mathematischen Operation ein Fehler auftritt.

Sehen wir es in Aktion:

<?php
$nummer = 1;
try {
$ergebnis = $nummer << -1;
} catch (ArithmeticError $e) {
echo "Ups! Ein Mathematikfehler ist aufgetreten: " . $e->getMessage();
}
?>

Hier versuchen wir, eine Bitverschiebung mit einer negativen Zahl durchzuführen, was nicht erlaubt ist. PHP fängt dies mit einem ArithmeticError ab und wir behandeln es elegant.

DivisionByZeroError

Erinnern Sie sich in der Mathematikstunde, als Ihr Lehrer sagte, dass man nicht durch null teilen kann? PHP erinnert sich auch! DivisionByZeroError wird ausgelöst, wenn Sie versuchen, durch null zu teilen.

<?php
function teilen($zähler, $nenner) {
if ($nenner == 0) {
throw new DivisionByZeroError("Werah! Man kann nicht durch null teilen!");
}
return $zähler / $nenner;
}

try {
echo teilen(10, 0);
} catch (DivisionByZeroError $e) {
echo "Fehler: " . $e->getMessage();
}
?>

In diesem Beispiel haben wir eine teilen-Funktion erstellt, die überprüft, ob der Nenner null ist. Wenn ja, wirft sie eine DivisionByZeroError mit einer benutzerdefinierten Nachricht.

ArgumentCountError

Hast du jemals jemanden angerufen und vergessen, was du sagen wolltest? ArgumentCountError ist die Art und Weise von PHP, "Hey, du hast etwas Wichtiges vergessen zu sagen!"

<?php
function grüße($name) {
return "Hallo, $name!";
}

try {
echo grüße();  // Ups, wir haben vergessen, einen Namen anzugeben!
} catch (ArgumentCountError $e) {
echo "Fehler: " . $e->getMessage();
}
?>

In diesem Fall rufen wir die grüße-Funktion ohne Angabe eines Namens auf. PHP wirft einen ArgumentCountError, den wir abfangen und behandeln.

TypeError

TypeError wird ausgelöst, wenn ein Wert nicht den erwarteten Typ hat. Es ist, als würde man eine Pizza bestellen und stattdessen ein Hamburger bekommen!

<?php
function addieren($a, $b) {
return $a + $b;
}

try {
echo addieren("5", "10");  // Wir übergeben Strings, nicht Ganzzahlen!
} catch (TypeError $e) {
echo "Ups! " . $e->getMessage();
}
?>

Hier erwartet unsere addieren-Funktion Ganzzahlen, aber wir übergeben Strings. PHP fängt diese Typungleichheit ab und wirft einen TypeError.

Ausnahmebehandlung in PHP

Ausnahmen in PHP sind wie Sicherheitsnetze in einem Zirkus. Sie fangen Fehler ab, bevor sie zu großen Problemen werden. Sehen wir uns an, wie man sie verwendet:

<?php
function prüfeAlter($alter) {
if ($alter < 0) {
throw new Exception("Alter kann nicht negativ sein!");
}
if ($alter < 18) {
throw new Exception("Entschuldigung, du musst 18 oder älter sein.");
}
return "Willkommen! Du bist alt genug.";
}

try {
echo prüfeAlter(15);
} catch (Exception $e) {
echo "Fehler: " . $e->getMessage();
} finally {
echo "<br>Dankeschön, dass du unseren Altersprüfer verwendet hast!";
}
?>

In diesem Beispiel prüfen wir, ob jemand alt genug ist, um einzutreten. Wir verwenden try, um den Code auszuführen, catch, um Ausnahmen zu behandeln, und finally, um Code auszuführen, unabhängig davon, ob eine Ausnahme ausgelöst wurde.

Erstellen eines benutzerdefinierten Ausnahmebehandlers

Schließlich erstellen wir unseren eigenen benutzerdefinierten Ausnahmebehandler. Das ist wie das Design deines eigenen Fehlermeldesystems!

<?php
class CustomException extends Exception {
public function errorMessage() {
$fehlertext = 'Fehler in Zeile '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> ist keine gültige E-Mail-Adresse';
return $fehlertext;
}
}

$email = "[email protected]";

try {
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
throw new CustomException($email);
}
} catch (CustomException $e) {
echo $e->errorMessage();
}
?>

Hier haben wir eine CustomException-Klasse erstellt, die eine detaillierte Fehlermeldung für ungültige E-Mail-Adressen bietet. Wir verwenden diese benutzerdefinierte Ausnahme, um Fehler bei der Validierung einer E-Mail-Adresse zu behandeln.

Und das war's! Wir haben eine breite Palette von Fehlerbehandlungstechniken in PHP abgedeckt. Erinnere dich daran, dass gute Fehlerbehandlung wie das Tragen eines Sicherheitsgurtes ist - es mag unnötig erscheinen, bis du es wirklich brauchst. Übe diese Konzepte weiter, und bald wirst du Fehler wie ein Profi behandeln können!

Methode Beschreibung
die() Beendet die Skriptausführung und gibt eine Nachricht aus
set_error_handler() Setzt eine benutzerdefinierte Fehlerbehandlungsfunktion
try-catch Wird für die Ausnahmebehandlung verwendet
throw Wird verwendet, um eine Ausnahme zu werfen
finally Gibt an, welcher Code unabhängig davon ausgeführt werden soll, ob eine Ausnahme ausgelöst wurde oder nicht
benutzerdefinierte Fehlerklassen Ermöglichen die Erstellung spezifischer Fehlerarten

Credits: Image by storyset