public function ($number, $text) {
if(!is_number($number)) {
throw new Exception('$number is not a valid number');
}
}
/**
* @return boolean
*/
public function ($number, $text) {
try {
if(!is_number($number)) {
throw new Exception('$number is not a valid number');
}
} catch(Exception $e){
return false;
}
}
News:
|
/**
* @return boolean
*/
public function ($number, $text) {
if(!is_number($number)) {
return false;
}
else {
return true;
}
}
/**
* @return boolean
*/
public function ($number, $text) {
return is_number($number);
}
|
was passier mit den Zehennägel wenn man den zweiten Beispiel folgender massen abändert:
[code] public function do($number, $text) { try { $db->beginTransaction(); if(is_number()) { throw new Exception('Invalid number'); } [...] $db->commit(); } catch(Exception $e) { $db->rollback(); throw $e; } } [/code] – blackdog9 07.02.2012
|
||
Die kriegen noch einen Kringel mehr.
Erst mal die Argumente prüfen: if(!is_number()) { throw new Exception('Invalid number'); } DANACH die eigentliche Arbeit tun: try { $db->beginTransaction(); ... } catch (...) {} – Matthias Hlawatsch 07.02.2012
|
||
Die Kringel bekomm ich so schnell nich mehr raus...
BTT: Als Ergänzung zu meiner Aussage _nachdem_ der Hinweis von Matthias befolgt wurde, möchte ich noch sagen, dass es bei dieser Lösung ja dann nich nur um den return geht. Hier wird ja die Exception gefangen, um einen Rollback durchzuführen, und danach eh wieder geworfen. Demnach darf do() sowieso einen Fehler werfen (und sollte es auch. Sobald ein boolscher Rückgabewert hinzukommt, sollte das nicht mehr der Fall sein (und der Name "tryDo()" würde besser passen)) – Karill Endusa 07.02.2012
|
|
ja, es sollte PHP sein ;-) und ja, normalerweise müsste man den richtigen Typ Exception benutzen. Für den Beispiel habe ich es aber etwas "vereinfacht" ;-)
Ist aber ein berechtigter Einwand. – blackdog9 08.02.2012
|
|
7 |
-1: Wie man es im konkreten Fall besser machen kann, steht in meinem Kommentar zu blackdog9's Rückfrage. Und allgemein halte ich das Werfen von Exceptions, die noch in der selben Methode gefangen werden, für eine besonders schlecht lesbare Form des goto-Befehls und deshalb eher für worst als best practice.
– Matthias Hlawatsch 07.02.2012
|
|
dem kann ich mich nur anschließen: try-throw-catch ist einfach "Gänsehaut-Code"... nicht nur, aber eben auch!
– Karill Endusa 07.02.2012
|
||
@Matthias: Die goto-Assoziation ist ja mal richtig gut...+1 und danke für das Geschenk dieses Nachmittags-Schmunzlers...
– ffordermaier 07.02.2012
|
||
Es gibt bestimmt 100 verschiedene Möglichkeiten, warum das werden einer Exception innerhalb eines try blocks Sinn machen kann. Weil Ihr dabei eine Gänsehaut bekommt wird das nicht schlechter. Das sagt nur etwas über Euer Vorstellungsvermögen aus. Beipiele: Generalisiertes Logging, lesbare Kontrollstukturen, ...
Nur weil dieses Beipiel einfacher zu lösen ist, ist es kein Bad Practice! Nehmt die Scheuklappen ab! – DaSpors 17.02.2012
|
||
Wichtig bei der Site suche ist die Verknüpfung der Begriffe mit "+", an die man sich noch erinnern kann ;-)