W3docs

getMessage()

Erfahren Sie, wie getMessage() die Fehlermeldung einer abgefangenen PHP-Exception abruft – mit Beispielen, Fallstricken und Best Practices.

Einführung

PHPs Exception-Handling ermöglicht es, den Code, der ein Problem erkennt, vom Code zu trennen, der darauf reagiert. Wenn etwas schiefläuft, werfen Sie mit throw ein Exception-Objekt, das den Call-Stack hinaufwandert, bis ein passender catch-Block es behandelt. Dieses Objekt trägt Details darüber, was passiert ist – und das am häufigsten genutzte dieser Details ist die menschenlesbare Fehlermeldung.

Dieses Kapitel behandelt Exception::getMessage(), die Methode, die diesen Meldungsstring zurückgibt. Sie erfahren, was sie zurückgibt, wie sie sich von den anderen „Getter"-Methoden des Exception-Objekts unterscheidet, welche häufigen Fallstricke es gibt und wie sie für benutzerseitige Fehler, Logging und Debugging eingesetzt wird.

Was getMessage() zurückgibt

getMessage() gibt den Meldungsstring zurück, der als erstes Argument an den Konstruktor der Exception übergeben wurde. PHP speichert diesen string auf dem Exception-Objekt, sobald die Exception erstellt wird, und getMessage() liest ihn einfach wieder aus.

<?php
$e = new Exception("Something went wrong");
echo $e->getMessage(); // Something went wrong

Zwei Fakten, die es sich zu merken lohnt:

  • Die Methode nimmt keine Argumente entgegen und gibt immer einen string zurück.
  • Wurde kein Meldungstext an den Konstruktor übergeben, gibt sie einen leeren string ("") zurück, nicht null.
<?php
$e = new Exception();      // no message
var_dump($e->getMessage()); // string(0) ""

getMessage() ist auf der Basisklasse Exception (und auf Error) definiert und steht damit für jede eingebaute und benutzerdefinierte Exception zur Verfügung – RuntimeException, InvalidArgumentException, TypeError und jede Klasse, die von ihnen erbt.

Syntax

final public Exception::getMessage(): string

Die Methode ist final, was bedeutet, dass Unterklassen sie nicht überschreiben können – die Meldung, die Sie an new Exception("...") übergeben, ist genau das, was Sie zurückbekommen.

Grundlegende Verwendung

Um eine Meldung auszulesen, fangen Sie die Exception in einem try/catch-Block ab. Der try-Block enthält Code, der fehlschlagen könnte; der catch-Block wird nur ausgeführt, wenn eine Exception geworfen wurde.

<?php

function divide($a, $b) {
    if ($b === 0) {
        throw new InvalidArgumentException("Cannot divide by zero.");
    }
    return $a / $b;
}

try {
    echo divide(10, 0);
} catch (Exception $e) {
    echo "Caught: " . $e->getMessage();
}
?>

Ausgabe:

Caught: Cannot divide by zero.

InvalidArgumentException erweitert Exception, daher fängt der catch (Exception $e)-Block sie dennoch ab, und getMessage() gibt den benutzerdefinierten string zurück, den wir beim Werfen übergeben haben.

Praktische Anwendungsfälle

Fehler protokollieren

Ein gängiges Muster besteht darin, die Meldung in ein Log zu schreiben, damit Sie Fehler später untersuchen können. Kombinieren Sie getMessage() mit getCode(), getFile() und getLine() für aussagekräftigere Log-Einträge.

<?php
try {
    throw new RuntimeException("Database connection failed");
} catch (RuntimeException $e) {
    $entry = sprintf("[%s] %s", date("Y-m-d"), $e->getMessage());
    echo $entry;
}
?>

Ausgabe (Datum variiert):

[2026-06-21] Database connection failed

Eine sichere Meldung für den Benutzer anzeigen

Exception-Meldungen enthalten häufig technische Details. Verwenden Sie getMessage() für Ihre Logs, zeigen Sie Benutzern in der Produktion jedoch eine generische Meldung an, damit keine internen Informationen wie Dateipfade oder SQL-Abfragen nach außen dringen.

<?php
try {
    throw new Exception("SQLSTATE[28000]: Invalid password for user 'root'");
} catch (Exception $e) {
    error_log($e->getMessage());          // full detail goes to the log
    echo "Sorry, something went wrong.";  // safe message for the user
}
?>

getMessage() im Vergleich zu den anderen Exception-Gettern

getMessage() ist eine von mehreren schreibgeschützten Methoden auf einem Exception-Objekt. Wenn Sie wissen, was jede zurückgibt, können Sie die richtige auswählen:

MethodeGibt zurück
getMessage()Den Meldungsstring, der an den Konstruktor übergeben wurde
getCode()Den ganzzahligen (oder string-basierten) Fehlercode
getFile()Die Datei, in der die Exception erstellt wurde
getLine()Die Zeilennummer, in der sie erstellt wurde
getTrace()Den Stack-Trace als array
getPrevious()Die vorherige Exception in einer Kette, falls vorhanden

Wenn Sie für Debugging-Zwecke alles auf einmal benötigen, liefert das Casting der Exception zu einem string (über __toString()) einen formatierten Dump, der bereits Meldung, Datei, Zeile und Trace enthält.

Fallstricke

  • Leerer string, nicht null. Wie oben gezeigt, gibt eine Exception ohne Meldung "" zurück. Code wie if ($e->getMessage()) behandelt das als falsy – schützen Sie sich davor, wenn ein leerer string in Ihrem Anwendungsbereich bedeutsam ist.
  • getMessage() ist final. Sie können sie nicht überschreiben, um den Text zu transformieren. Um anzupassen, was Aufrufer sehen, übergeben Sie den gewünschten string an den Konstruktor (häufig über parent::__construct($message) in einer benutzerdefinierten Exception-Klasse).
  • fopen() wirft standardmäßig keine Exception. Viele PHP-Funktionen geben Warnungen aus und geben false zurück, anstatt zu werfen. Im folgenden Dateibeispiel prüfen wir den Rückgabewert und werfen manuell; solche Funktionen füllen getMessage() nicht von selbst, es sei denn, Sie konvertieren die Warnung in eine Exception (zum Beispiel mit set_error_handler()).

Vollständiges Beispiel

<?php

try {
    // fopen() returns false and emits a warning on failure rather than throwing
    $file = @fopen("does-not-exist.txt", "r");
    if (!$file) {
        throw new Exception("File not found");
    }
} catch (Exception $e) {
    echo "Error message: " . $e->getMessage();
}
?>

Ausgabe:

Error message: File not found

Hier öffnen wir eine Datei, erkennen den Fehler anhand des Rückgabewerts von fopen() und werfen eine Exception mit einer benutzerdefinierten Meldung. getMessage() ruft diesen string dann ab, damit wir ihn anzeigen oder protokollieren können. Für eine garantierte Bereinigung unabhängig von Erfolg oder Misserfolg würden Sie einen finally-Block hinzufügen.

Fazit

Exception::getMessage() gibt die Fehlermeldung zurück, die auf einer abgefangenen Exception gespeichert ist – den string, den Sie an den Konstruktor übergeben haben, oder einen leeren string, wenn keiner angegeben wurde. Es ist der einfachste und am häufigsten verwendete Exception-Getter, ideal für Logging, Debugging und die Erzeugung von benutzergerichteten Rückmeldungen. Kombinieren Sie ihn mit den anderen Gettern wie getCode() und getTrace() für vollständige Fehlerberichte, und lesen Sie PHPs gesamtes Exception-Handling-Modell, um ihn effektiv einzusetzen.

Übungen

Übung
Was macht die getMessage()-Funktion in PHP?
Was macht die getMessage()-Funktion in PHP?
Was this page helpful?