wake-up-neo.net

Ausnahmen in eine PHP Versuchen Sie Catch Block

Ich habe eine PHP Funktion in einer Drupal 6 .module-Datei. Ich versuche, vor der Ausführung intensiverer Aufgaben (z. B. Datenbankabfragen) anfängliche Variablenvalidierungen auszuführen. In C # habe ich zu Beginn meines Try-Blocks IF-Anweisungen implementiert, die neue Ausnahmen auslösten, wenn eine Validierung fehlschlägt. Die geworfene Ausnahme würde im Catch-Block abgefangen. Folgendes ist mein PHP Code:

function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    throw $e->getMessage();
  }
}

Wenn ich jedoch versuche, den Code auszuführen, wird mir gesagt, dass Objekte nur innerhalb des Catch-Blocks geworfen werden können.

Danke im Voraus!

61
kaspnord
function _modulename_getData($field, $table) {
  try {
    if (empty($field)) {
      throw new Exception("The field is undefined."); 
    }
    // rest of code here...
  }
  catch (Exception $e) {
    /*
        Here you can either echo the exception message like: 
        echo $e->getMessage(); 

        Or you can throw the Exception Object $e like:
        throw $e;
    */
  }
}
94
AlienWebguy

Wieder zu werfen 

 throw $e;

nicht die Nachricht.

57
Chen Kinnrot

Entfernen Sie einfach die throw aus dem catch-Block - ändern Sie sie in eine echo oder behandeln Sie den Fehler anderweitig.

Es sagt Ihnen nicht, dass Objekte nur in den catch-Block geworfen werden können, sondern nur, dass nur Objekte geworfen werden können, und der Ort des Fehlers sich im catch-Block befindet.

Im catch-Block versuchen Sie etwas zu werfen, was Sie gerade gefangen haben - was in diesem Zusammenhang sowieso wenig Sinn macht - und das, was Sie zu werfen versuchen, ist eine Zeichenfolge.

Eine echte Analogie von dem, was Sie tun, ist, einen Ball zu fangen und dann zu versuchen, das Herstellerlogo woanders hin zu werfen. Sie können nur ein ganzes Objekt werfen, keine Eigenschaft des Objekts.

15
DaveRandom
throw $e->getMessage();

Sie versuchen, eine string zu werfen.

Als Randbemerkung: Ausnahmen dienen normalerweise dazu, Ausnahmezustände der Anwendung zu definieren und nicht für Fehlermeldungen nach der Validierung. Dies ist keine Ausnahme, wenn ein Benutzer ungültige Daten angibt

3
KingCrunch

Throw benötigt ein durch \Exception instanziiertes Objekt. Nur der $e kann den Trick spielen.

throw $e
0
Goms