php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.07.2010, 17:04  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 6
PHP-Kenntnisse:
Anfänger
airobix befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Rückgabewerte und wie auf Fehler reagieren

Gibt es eigentlich eine allgemeine Regel was eine Methode zurück geben sollte?
Vor allem will ich wissen wie man am besten auf Fehler reagiert.

Es ist praktisch, wenn das aufrufende Script/Objekt/Controller mit einem

if($meinObject->machwas($wert)) {
// alles gut, mach weiter
}else{
// Hilfe schreien
}

reagiert. machwas() gibt also ein true oder false zurück.
Mal angenommen machwas() macht mehrere Dinge und eins davon geht schief und es kommt ein false zurück. Dann will ich vielleicht wissen, was davon nicht geklappt hat. Mir fallen folgende Lösungsansätze ein.

1.) Ich gebe statt einem false ein Array oder Objekt zurück. Dann müsste ich in der else Bedinnung prüfen was da zurückkommt.
2.) Ich könnte der Klasse eine Eigenschaft geben wie „isTrue“ auf das ich dann prüfen kann und eine error Eigenschaft in dem ich den Fehler schreibe/abfrage.
3.) Oft sehe ich auch, dass generell ein Array oder Objekt zurückgegeben wird. zB. Return array('isTrue’ => false, ’error’ => ’Datei nicht gefunden’ )

Was ist elegant und was sollte man vermeiden?

Dass man kritische Methoden mit try-catch abfangen sollte ist mir klar, nur weiß ich im catch Block auch nicht was den Fehler verursacht hat und wie darauf reagieren soll.
airobix ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.07.2010, 17:10  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Dafür sind Exceptions dar. Du kannst für dann für den Entsprechenden Fehler eine Exception werden (für jede Fehlerart z.b. eine andere Exception). Und im try-catch-Block kannst du dann entsprechend die einzelnen Exceptions abfangen und darauf reagieren. Siehe auch im Manual.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline   Mit Zitat antworten
Alt 25.07.2010, 12:36  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
papst23 befindet sich auf einem aufstrebenden Ast
Standard

Hi airobix,

wie Flor1an schon sagt sollte man für diese Art von Fehlerabfragen auf jeden Fall Exceptions verwenden. Folgendes hat sich bei uns in der Entwicklung als gutes Pattern bewährt:

1. Möglichst fein granulare Funktionen (ca. 20 - 40 Zeilen Code und nicht mehr als eine wikliche Action)

PHP-Code:
function tuWas()
{
  if(!
checkFirst)
     throw new 
FirstCheckException("First Fail");

  if(!
checkSecond)
     throw new 
SecondCheckException("Second Fail");

  
//... 
  //tuWas
  //...

  
return $result;

2. FirstCheckException und SecondCheckException sind Ableitungen von Exception.

3. An der Stelle wo die Funktion aufgerufen wird macht man dann folgendes:
PHP-Code:
// ...

try{
  
tuWas();
}catch(
FirstCheckException $e){
  
// First Check ist gescheitert
}catch(SecondCheckException $e){
   
// Second Check ist gescheitert
}catch (Exception $e) {
  
// Irgendwas anderes ist gescheitert

Gruß
René
papst23 ist offline   Mit Zitat antworten
Alt 25.07.2010, 17:37  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.069
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

PHP: Ausnahmebehandlung - Manual
__________________
"Nuschel ich?" - "Was?"
Chriz ist gerade online   Mit Zitat antworten
Alt 25.07.2010, 17:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

@papst: Das Beispiel ist doch sehr allgemein gehalten und ist IMHO Nicht für alle Anwendungsfälle sinnvoll.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 25.07.2010, 23:00  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
papst23 befindet sich auf einem aufstrebenden Ast
Standard

Hi nikosch ...

wie du siehst ist auch die Frage sehr allgemein, so dass die Antwort wohl passent ist

Zitat:
Gibt es eigentlich eine allgemeine Regel was eine Methode zurück geben sollte?
Gruß
René
__________________
mein blog
papst23 ist offline   Mit Zitat antworten
Alt 25.07.2010, 23:32  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Nein eben nicht. Eine allgemeine Frage sollte keine spezielle Antwort erhalten.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 26.07.2010, 08:54  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

Florian gesagt hat, ist dafür wohl eine Exception am geeignetsten.
Entweder du machst für jeden Fehler eine Excpetion und fragst dann auf diese Excpetion eben ab
PHP-Code:
class Invalid_Name_Exception extends Exception {} 
oder was vielleicht einfacher wäre, du gehst auf den Message-Code, den du bei der Excpetion wirfst.

Am besten wäre warscheinlich eine Kombination aus beidem.
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline   Mit Zitat antworten
Alt 26.07.2010, 08:54  
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 6
PHP-Kenntnisse:
Anfänger
airobix befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank. Auch wenn's allgemein war, hilft mir das schon mal weiter. Exceptions wurden von mir bisher nicht richtig eingesetzt, zumindest nicht mit mehreren Catch Anweisungen wie oben beschrieben. Danke, das werde ich sicherlich übernehmen (wenn es passt).

Wenn ich noch mal kurz auf den Rückgabewert zurückkommen darf. Mal abgesehen von dem Fehlerfall, gibt es da eine elegante Regel? Was sollte man zurückgeben? Ich grübel immer, ob ich die gewünschte Änderungen, die eine Methode hervorruft in ein/das Objekt speichern soll, oder ob es platt zurückgegeben werden soll.

Ein "allgemeine" Antwort würde mir reichen .
airobix ist offline   Mit Zitat antworten
Alt 26.07.2010, 08:57  
Erfahrener Benutzer
 
Registriert seit: 15.04.2010
Beiträge: 813
PHP-Kenntnisse:
Fortgeschritten
Paul.Schramenko befindet sich auf einem aufstrebenden Ast
Standard

IMHO sollten Objekte immer den gleichen Typ zurückgeben.
D.h. wenn deine Funktion normalerweise ein Array von Daten zurückgibt, empfinde ich es für schlecht, wenn dieselbe Funktion im Fehlerfall false zurückliefert.
__________________
"My software never has bugs, it just develops random features."
"Real programmers don't comment. If it was hard to write, it should be hard to understand!"
Positive Bewertungen sind nicht unwillkommen...
Paul.Schramenko ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Zip Archive mit PHP erstellen - Kein Fehler, aber ZIP Archiv ist nicht da robat PHP Tipps 2010 34 09.03.2011 20:17
Funktion rename() auf USB-Festplatten bringt Fehler Wing PHP Tipps 2010 13 16.07.2010 23:00
MySQL: Fehler 10046 keine Datenbank ausgewählt aschunk Datenbanken 5 22.04.2010 12:27
[Erledigt] Syntax Error - Wo ist der Fehler? Extremefall PHP Tipps 2009 5 14.12.2009 17:46
[Erledigt] vista, windows update Fehler 80070422 Screeze Off-Topic Diskussionen 3 23.09.2009 18:24
[Erledigt] Fehler bei Array ausgabe newWorldOrder PHP Tipps 2009 2 23.02.2009 17:29
Include fehler abfangen? fadass PHP Tipps 2005-2 16 23.12.2008 13:07
Frage: Suche Fehler in diesem Script... PHP Tipps 2005-2 14 25.10.2005 19:24
[Erledigt] [phpmailer] - SMTP Fehler: Die folgenden Empfänger sind ... PHP Tipps 2005-2 1 05.10.2005 15:19
Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
[Erledigt] Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php auf fehler reagieren, php error exception abfangen, wie sollte man auf einen fehler reagieren

Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum