or die(Blah)?



  • Reyx schrieb:

    Und was genau willst du mit $errorCount und $errorString noch anfangen, wenn du das Script abbrichst? Entweder, du gibst die Meldung per print() bzw. Alias aus, oder du lässt das Script ausführen und wartest, bis die Variablen ausgewertet werden. Alles andere hat wenig Sinn 😉

    Da steht nichts von abbrechen - da steht 'return' 😛

    Reyx schrieb:

    Es gibt übrigens auch Exception Handling in PHP.

    Erst in PHP5, und das hat (leider) noch lang nicht jeder. In PHP5 sollte man ohnehin die mysqli-Extension anstatt der mysql-Extension verwenden.



  • Reyx schrieb:

    Der or-Operator ist in diesem Fall die schlechteste Wahl; ich kann nicht nachvollziehen, dass ihr das so in der Schule lernt!

    Wast ist an dem so schlecht? Ich hab auch immer:

    mysql_irgendwas(...) or my_die('Gestorben @ MyFunc()',mysql_error());
    

    MfG SideWinder



  • @Neku
    Da du aber weder $errorCount noch $errorString mit global verfügbar gemacht hast, gehe ich davon aus, dass du dich nicht innerhalb einer Funktion befindest. Und damit stoppst du die Ausführung der aktuellen Datei 😉

    @SideWinder
    Es ist schlichtweg eine unsaubere Art. Dein Script wird abgebrochen, du leistest keine Aufräumarbeit, schließt deine (X)HTML/XML-Seite nicht korrekt ab und kannst nicht weiter auf den Fehler reagieren. Eine kontrollierte Fehlerbehandlung währe aber angemessener! Du würdest ja auch in z.B. einem C++-Programm nicht einfach auf return 0; in der main(), exit() oder abort() verweisen 😉

    Exception Handling bietet da, u.a., eine bessere Art der Fehlerbehandlung. Und selbst wenn kein PHP 5 läuft, kann man den Fehler abfangen und an einer zentralen Stelle sinvoll darauf reagieren - anstatt das Script einfach gnadenlos von 100 auf 0 ins Nirvana zu schießen!



  • Ich hab kein PHP5 am Webserver, aber abgesehen davon mach ich auch in C sowas:

    int main (int argc, char** argv)
    {
        if(argc != 2)
            return -1;
    
        ...
    }
    

    MfG SideWinder



  • Aber wohl kaum, wenn du gerade x Fenster instanziiert hast, der Benutzer gerade in 5 Schaltflächen Daten angeben kann o.ä.

    Bei einem kleinen Script in PHP ist das natürlich kein Ding, aber in größeren Anwendungen kann man schlecht einfach die() schreiben und gut ...



  • Gibts in PHP keinen GC der für sowas zuständig ist?

    Außerdem mach ich ja ein my_die() und nicht direkt die(). Das heißt ich beende die Ausgabe sehr wohl noch korrekt.

    MfG SideWinder



  • Nein, aber i.d.R. werden Resourcen automatisch freigegeben. Was ich mit "Aufräumarbeiten" meine währe z.B. das abschließen eines Logs.

    Die Frage ist nur, wie du zur momentanen Situation auf einen Fehler reagieren kannst. Gehen wir z.B. davon aus, du schreibst ein XML oder XHTML-Dokument. Wie wahrscheinlich ist es dann z.B., dass du immer genau weißt, welche Elemente du noch schließen musst? Sehr unwahrscheinlich -> Schon knallt dir dein Browser eine XML-Fehlinterpretation hin. Wenn du hingegen an einer Stelle gezielt auf Fehler prüfst, kannst du ordentlich und ohne Workaround z.B. eine Fehlerbox anzeigen. Das kannst du mit my_die(), gleich wie du es definierst, i.d.R. nicht!

    Aber gut, letztendlich ist es wohl auch Geschmackssache. Mir ist diese Form zu schwammig, aber wenn jemand unbedingt auf seinem or-X basiert ... bitte 😉



  • Reyx schrieb:

    @Neku
    Da du aber weder $errorCount noch $errorString mit global verfügbar gemacht hast, gehe ich davon aus, dass du dich nicht innerhalb einer Funktion befindest. Und damit stoppst du die Ausführung der aktuellen Datei 😉

    Ist ja auch nur ein Ausschnitt - das Globalisieren kann er auch selbst übernehmen 😉
    Außerdem ist dieser Code außerhalb einer Funktion problemlos möglich: Die beiden Variablen wären global und das 'return' beendet entweder die Ausführung oder springt (im Falle einer Include-Datei) zum Caller zurück.

    Reyx schrieb:

    @SideWinder
    Es ist schlichtweg eine unsaubere Art. Dein Script wird abgebrochen, du leistest keine Aufräumarbeit, schließt deine (X)HTML/XML-Seite nicht korrekt ab und kannst nicht weiter auf den Fehler reagieren.

    Aus meiner Sicht ist es auch 'unsauber', vor Scriptende überhaupt etwas auszugeben. Wird daran liegen, dass das Arbeiten mit Templates mit das erste war, was ich bei PHP gelernt habe 😃



  • or die() stammt von perl glaub ich.



  • Moin zusammen,

    tut mir leid das ich nicht früher Antworten konnte, das Netz fiel am Sonntag aus...

    anyway...
    Der mySQL Aufruf ist in einer Funktion der Error und ErrorString sind Pointer
    welche ich ausserhalb der Funktion ausgeb, damit klar wird wo der Fehler liegt. Das hab ich im Beispiel schlichtweg vergessen hinzuschreiben.

    Ich habe mehrere solcher Funktionen die div. Sachen kontrollieren (länge des Username, Sonderzeichen, leerer String etc.) und eben auch ob der Name schon in der DB von jemandem verwendet wird.
    Sollte irgendwo ein MySQL Befehl schief gehen soll nichts einfach abgebrochen werden, sondern eine von mir erstellte Message angezeigt werden. Weshalb ich kein or die() benutzen will.

    Also wie ich es nun hier mit gekriegt habe kann, ich eine beliebige eigene Funktion hinter dem OR aufrufen (ich dachte OR die gehört irgendwie zusammen).

    Danke vielmals, ich werde das heute Abend ausprobieren.


Anmelden zum Antworten