Ich habe eine PHP-Funktion in einer Drupal 6 .module-Datei. Ich versuche, erste Variablenüberprüfungen durchzuführen, bevor ich intensivere Aufgaben (z. B. Datenbankabfragen) ausführe. In C # habe ich IF-Anweisungen am Anfang meines Try-Blocks implementiert, die neue Ausnahmen ausgelöst haben, wenn eine Validierung fehlgeschlagen ist. Die ausgelöste 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 mitgeteilt, dass Objekte nur innerhalb des Catch-Blocks geworfen werden können.
Danke im Voraus!
php
exception-handling
drupal-6
try-catch
kaspnord
quelle
quelle
Parse error: syntax error, unexpected 'throw' (T_THROW)
. Ich denke nicht mehr unterstützt.Antworten:
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; */ } }
quelle
Um zu werfen, tun
throw $e;
nicht die Nachricht.
quelle
Entfernen Sie einfach den
throw
aus dem Fangblock - ändern Sie ihn in einenecho
oder behandeln Sie den Fehler auf andere Weise.Es sagt Ihnen nicht, dass Objekte nur in den catch-Block geworfen werden können, es sagt Ihnen, dass nur Objekte geworfen werden können, und der Ort des Fehlers befindet sich im catch-Block - es gibt einen Unterschied.
Im catch-Block versuchen Sie, etwas zu werfen, das Sie gerade gefangen haben - was in diesem Zusammenhang ohnehin wenig Sinn macht - und das, was Sie zu werfen versuchen, ist eine Zeichenfolge.
Eine reale Analogie zu dem, was Sie tun, besteht darin, einen Ball zu fangen und dann zu versuchen, nur das Logo des Herstellers an eine andere Stelle zu werfen. Sie können nur ein ganzes Objekt werfen, keine Eigenschaft des Objekts.
quelle
throw $e->getMessage();
Du versuchst einen zu werfen
string
Als Nebenbemerkung: Ausnahmen sind normalerweise die Definition von Ausnahmezuständen der Anwendung und nicht für Fehlermeldungen nach der Validierung. Dies ist keine Ausnahme, wenn ein Benutzer Ihnen ungültige Daten gibt
quelle
function validateField($validate) {return empty($validate);}
und irgendwo zum Beispielif validateField($x){ echo "Field is empty";}else{doSomethingUseful();}
Exception
s nicht für den Kontrollfluss (hier: Validierung) :)throw
Objekte, sothrow $e;
oderthrow new \Exception( $e->getMessage() );
.Throw benötigt ein Objekt, das von instanziiert wird
\Exception
. Nur der$e
Gefangene kann den Streich spielen.throw $e
quelle