PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : die. geordneter Rückzug?



BlueJay
19-09-2005, 13:03
Hallo Leute,

ich stricke gerade an einem Programm, was nach Anfrage in diversen Functions komplette HTML-Seiten zum Anwender schickt.

Ich wollte nach Senden der Seiten das Programm mit die beenden.

Frage: Macht die einen geordneten Rückzug oder gibt es bei häufigen Aufrufen Probleme wie stack-overflow, seltsames Verhalten des Servers und andere Schweinereien?

Code-Auszug:


switch($seite)
{ case 0: sende_anfangsseite(); die();
case 1: sende_nachfrage(); die();
case 2: if ($alles_komplett) sende_saten_raus($daten) else sende_wasistlos(); die;
.....
}


so long,
BlueJay

BLUESCREEN3D
19-09-2005, 17:05
So lange du keine Meldung ausgeben willst solltest du einfach exit() benutzen. Außer der Meldung gibt es zwischen die() und exit() AFAIK keinen Unterschied.


Frage: Macht die einen geordneten Rückzug oder gibt es bei häufigen Aufrufen Probleme wie stack-overflow, seltsames Verhalten des Servers und andere Schweinereien?
Ich hatte bisher keine Probleme damit.

Allerdings weiß ich nicht, ob bei einem exit eine ggf. mit register_shutdown_function() eingestellte Funktion noch aufgerufen wird.

michael.sprick
19-09-2005, 17:42
auch exit kannst Du eine Meldung mitgeben:


exit("Programm beendet...");




Note: The die() function is an alias for exit().


Allerdings beendest Du Dein switch-case Konstrukt lieber mit break - nicht mit die()


$var=1;

switch($var)
{
case 1: echo "eins"; break;
case 2: echo "zwei"; break;
case 3: echo "drei"; break;
default: echo "keins von allen...";
}

BLUESCREEN3D
21-09-2005, 02:35
auch exit kannst Du eine Meldung mitgeben
Ich werd nie wieder ins übersetzte Manual gucken...
Vergleiche:
http://www.php.net/manual/de/function.exit.php
http://www.php.net/manual/en/function.exit.php

Wenn es keinen Unterschied zwischen die() und exit() gibt werd ich auch nie wieder die() benutzen.

Das mit break stimmt nur, wenn nach dem switch kein Code mehr kommt.

michael.sprick
21-09-2005, 10:43
Das mit break stimmt nur, wenn nach dem switch kein Code mehr kommt.
Ansichtssache... ich habe lieber einen einzigen, dafür wohldefinierten Ausstiegspunkt. Theoretisch kannst Du ja auch am Ende jeder Funktion ein exit() benutzen, wenn Du weißt, dass nach dieser Funktion nix mehr ausgeführt werden soll... aber schön ist das nicht. Für mich sind solche Sachen immer schlecht zu debuggen, schlecht zu erweitern, schlecht zu lesen... ;)

BLUESCREEN3D
21-09-2005, 21:20
Ansichtssache... ich habe lieber einen einzigen, dafür wohldefinierten Ausstiegspunkt. Theoretisch kannst Du ja auch am Ende jeder Funktion ein exit() benutzen, wenn Du weißt, dass nach dieser Funktion nix mehr ausgeführt werden soll... aber schön ist das nicht. Für mich sind solche Sachen immer schlecht zu debuggen, schlecht zu erweitern, schlecht zu lesen... ;)
Jo, ich hätte das auch nicht so geschrieben, aber angenommen der Code sieht im Gesamtzusammenhang so aus:

if ($bla)
{
switch
(...)
}

//hier gehts weiter, sollte es aber nicht, wenn $bla wahr ist
dann wäre es schon ein Unterschied, wenn man break einsetzt.
Darauf wollte ich hinaus :D

BlueJay
22-09-2005, 07:49
Ansichtssache... ich habe lieber einen einzigen, dafür wohldefinierten Ausstiegspunkt. Theoretisch kannst Du ja auch am Ende jeder Funktion ein exit() benutzen, wenn Du weißt, dass nach dieser Funktion nix mehr ausgeführt werden soll.

Genau das ist der Fall: Seite ausgeben und wech! (leaf-node)
Spart 'ne Menge Tipparbeit (Verschachtelung).
Deshalb steht der Kram auch nicht in der Function, die die Seite ausgibt, sondern in dem switch-Konstrukt im Hauptprogramm.

Ist eine Art Filter bis zu dem Punkt, an der Server belastet werden soll, sprich, die eigentliche Verarbeitung beginnt.

so long,
BlueJay