anpera.net
https://anpera.dyndns.org/phpbb3/

switch $_GET['op']
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=5045
Seite 1 von 1

Autor:  Patzue [ Sa 12 Dez, 2009 16:17 ]
Betreff des Beitrags:  switch $_GET['op']

Hey!

Habe in der SuFu nichts gefunden.. Oder habe einfach nichts richtiges eingegeben..

Weiß nicht mehr in welchem script, aber da habe ich sowas auf die Art gesehen:
$this->bbcode_second_pass_code('', 'switch ($_GET['op']);

case ""

output("Text1");

break;

case "1"

output("Text2");
break;')

So.. Wollte jetzt wissen, worin der Unterschied zwischen

$this->bbcode_second_pass_code('', 'if ($_GET['op']=""){
output("Text1");
}
elseif ($_GET['op']="1"){
output("Text2");
}
')

Ist das erstere jetzt "richtiger" (wie z.b. anstatt $session[user][gold] eben $session['user']['gold'] ) oder hat das auch Performance Gründe? dass z.b. die ewig vielen If-Abfragen das Skript langsam machen?

Danke schonmal für Antworten ;)

Autor:  Harthas [ Sa 12 Dez, 2009 16:59 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Aus meiner persönlichen Erfahrung würde ich folgendes sagen: Ein switch-Konstrukt läuft grundsätzlich etwas schneller als ein if-else-Konstrukt. Ausserdem finde ich, dass ein switch-Konstrukt oft auch etwas übersichtlicher aussieht, und eine gute Struktur bietet.

Allerdings muss man auch sagen, dass der Geschwindigkeitsunterschied nicht gross ist, und es - gerade bei LoGD - keine spürbaren Unterschiede gäbe.

Im übrigen kannst du es nicht mit "$session['user']['gold']" und "$session[user][gold]" vergleichen. Die Single-Quotes in einem Array sollten dastehen, damit PHP den Wert nicht als Konstante interpretiert ( Wirft sonst einen Notice-Fehler ).

Im Übrigen ist ein switch-Konstrukt eher so aufgebaut ;-)
$this->bbcode_second_pass_code('', 'switch( $_GET['op'] ) {
case 'bla':
output( 'Bla' );
break;

default:
output( 'Blabla' );
break;
}')

Autor:  Welv [ Sa 12 Dez, 2009 17:07 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Da war wohl jemand schneller, allerdings stimme ich dem allen zu.

Und um weitere NOTICE zu vermeiden, sollte

switch(isset($_GET['op'])) {

verwendet werden, falls 'op' nicht gesetzt ist ^^


Ach ja. Wer noch Zeilen sparen will, kann sich im switch das letzte "break;" sparen.

Und noch etwas.
$this->bbcode_second_pass_code('', '
if($_GET['op']=="bla" || $_GET['op']=="blub"){}
')
ist gleich
$this->bbcode_second_pass_code('', '
switch(isset($_GET['op'])) {
case"bla":
case"blub":
output();
break;
default:
output();
break;
}
')

Autor:  Patzue [ Sa 12 Dez, 2009 17:18 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Danke für die schnelle Antwort ihr beiden :)


Harthas hat geschrieben:
Im Übrigen ist ein switch-Konstrukt eher so aufgebaut ;-)
$this->bbcode_second_pass_code('', 'switch( $_GET['op'] ) {
case 'bla':
output( 'Bla' );
break;

default:
output( 'Blabla' );
break;
}')


Ok danke ;)

Hartas hat geschrieben:
Im übrigen kannst du es nicht mit "$session['user']['gold']" und "$session[user][gold]" vergleichen. Die Single-Quotes in einem Array sollten dastehen, damit PHP den Wert nicht als Konstante interpretiert ( Wirft sonst einen Notice-Fehler ).


Ok.. dann muss ich mal eine .php durchschaun.. Wirft mir nämlich 100 Notice-Fehler aus (sehr grob gerundet :D)

Autor:  Harthas [ Sa 12 Dez, 2009 17:23 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Ja, du kannst da natürlich isset verwenden. Oder empty.

LoGD Notice-frei zu kriegen ist übrigens eine ziemliche Anstrengung. Untenstehender Link könnte dir allerdings bei der Auswertung der Fehlermeldungen helfen.
http://www.php-fehlermeldungen.de/topicmenu1/index0.html

Autor:  Welv [ Sa 12 Dez, 2009 18:16 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Harthas hat geschrieben:

LoGD Notice-frei zu kriegen ist übrigens eine ziemliche Anstrengung.


Neu schreiben ist leichter ^^

Autor:  Patzue [ Sa 12 Dez, 2009 22:10 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Welv hat geschrieben:
Harthas hat geschrieben:

LoGD Notice-frei zu kriegen ist übrigens eine ziemliche Anstrengung.


Neu schreiben ist leichter ^^


:lol: Aber ich glaub dann nimmt jeder die Notice Fehler hin, oder? ;)

Autor:  Welv [ Sa 12 Dez, 2009 23:19 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Patzue hat geschrieben:
Welv hat geschrieben:
Harthas hat geschrieben:

LoGD Notice-frei zu kriegen ist übrigens eine ziemliche Anstrengung.


Neu schreiben ist leichter ^^


:lol: Aber ich glaub dann nimmt jeder die Notice Fehler hin, oder? ;)


Nicht jeder, ich schreib grad neu ;) Aber im Grunde kann man sie hinnehmen. Ich würde nur keine Addons veröffentlichen die Solche Fehler haben, da es auch viele php-Anfänger bei LoGD gibt, die diese Fehler dann als richtig erlernen.

Autor:  Patzue [ Sa 12 Dez, 2009 23:34 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Welv hat geschrieben:

Nicht jeder, ich schreib grad neu ;) Aber im Grunde kann man sie hinnehmen. Ich würde nur keine Addons veröffentlichen die Solche Fehler haben, da es auch viele php-Anfänger bei LoGD gibt, die diese Fehler dann als richtig erlernen.


Uii :D

Joa.. Bis ich ein Addon veröffentliche.. Ich glaube, dass das noch ne Weile dauern wird ;)

Autor:  Tidus [ So 13 Dez, 2009 13:12 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Harthas hat geschrieben:
Ja, du kannst da natürlich isset verwenden. Oder empty.

LoGD Notice-frei zu kriegen ist übrigens eine ziemliche Anstrengung. Untenstehender Link könnte dir allerdings bei der Auswertung der Fehlermeldungen helfen.
http://www.php-fehlermeldungen.de/topicmenu1/index0.html



Darf ich mich da kurz einklinken? ^^

ist es denn nun egal ob ich: if (isset($PATH_INFO) != '') { oder if (empty($PATH_INFO) != '') {

schreib und würde das isset irgendwas an der funktionalität von $PATH_INFO ändern oder einfach nur den NOTICE unterdrücken?

Autor:  Auric [ So 13 Dez, 2009 13:49 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Hi

Erstmal eine wichtige Sache vorweg: empty und isset liefern als Ergebnis nur Bool'sche Werte, also true oder false. Damit macht $this->bbcode_second_pass_code('', 'switch(isset($_GET['irgendwas'])) {
case 'a':
//tu was
case 'b':
// tu was anderes
}') keinen Sinn, da 'a' oder 'b' nie erreicht werden. Für empty gilt selbes.

Meine Vorgehensweise zur Vermeidung von NOTICE-Fehlern ist:
$this->bbcode_second_pass_code('', '
$op = isset($_GET['op']) ? $_GET['op'] : ''; // Wobei man '' durch den Default-Wert seiner Wahl ersetzen kann.

if($op == 'blah') { /* Inhalt */ }
// bzw.
switch($op) {
case 'a':
// ...
}')

Bei einer einzelnen If-Verzweigung kann man das natürlich auch in der If-Kondition checken und braucht keine extra Variable, aber das Prinzip sollte verständlich sein. Das ganze lässt sich natürlich auch auf jede andere Variable, egal ob $_GET['blah'], $_POST['blah'], $irgendwas oder wie auch immer übertragen.

Auric

Autor:  Welv [ So 13 Dez, 2009 14:05 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Auric hat geschrieben:
Hi

Erstmal eine wichtige Sache vorweg: empty und isset liefern als Ergebnis nur Bool'sche Werte, also true oder false. Damit macht $this->bbcode_second_pass_code('', 'switch(isset($_GET['irgendwas'])) {
case 'a':
//tu was
case 'b':
// tu was anderes
}') keinen Sinn, da 'a' oder 'b' nie erreicht werden. Für empty gilt selbes.



deswegen nimmt man auch ein

switch(){
default:
output();
break;

}

ins switch =)

Autor:  Harthas [ So 13 Dez, 2009 14:58 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Bei einem "switch(isset($_GET['irgendwas'])) {" wird meines Wissens nach einfach der erste switch-Block angewählt (Wenn isset true zurück gibt ).

Autor:  Eliwood [ So 13 Dez, 2009 15:30 ]
Betreff des Beitrags:  Re: switch $_GET['op']

switch prüft nur auf Gleichheit - also ja, es wird der Erstbeste Block angewählt, der nicht 0, false oder NULL ist. Deshalb dürfte das ganze besser so sein (So, wie ichs mache):

$this->bbcode_second_pass_code('', 'switch(isset($_GET['op']) ? $_GET['op'] : '') {
case '':
default: {
break;
}

case 'one': {
break;
}
}')

Autor:  Patzue [ Do 07 Jan, 2010 18:17 ]
Betreff des Beitrags:  Re: switch $_GET['op']

Hey!

Habe noch ne frage dazu. Wie mach ich denn dann den addnav dazu?

aslo um z.b. zum case b zu kommen? würde dann der addnav dennoch

addnav("Zu case b","file.php?op=b");

oder?

Autor:  Welv [ Do 07 Jan, 2010 19:08 ]
Betreff des Beitrags:  Re: switch $_GET['op']

jop

Autor:  Patzue [ Fr 08 Jan, 2010 12:55 ]
Betreff des Beitrags:  Re: switch $_GET['op']

k thx

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/