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 ![]() |
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 ^^ ![]() ![]() |
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 ^^ ![]() ![]() Nicht jeder, ich schreib grad neu ![]() |
Autor: | Patzue [ Sa 12 Dez, 2009 23:34 ] |
Betreff des Beitrags: | Re: switch $_GET['op'] |
Welv hat geschrieben: Nicht jeder, ich schreib grad neu ![]() Uii ![]() 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/ |