[PHP] switch case-Werte auslesen?

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
habe mal eine Frage, ist es möglich, wenn ja wie, die case-Werte bei ner switch-Anweisung rauszubekommen, ohne eval benutzen zu müssen, falls dies möglich wäre?
 
warum rausbekommen?
bei ner switch-case-struktur willst du ja bestimmte befehle bei einem bestimmten, dir bekannten zustand ausführen
 
PHP:
  switch($_GET['site'])
    {

      case("rom") :
        // ... php ...
        break;

      case("münchen") :
        // ... php ...
        break;

      case("klamm") :
        // ... php ...
        break;

      case("google") :
        // ... php ...
        break;

      case("ebay") :
        // ... php ...
        break;

    }

Nun möchte ich an rom, münchen, klamm, google und ebay kommen, ohne es vorher in ein Array schreiben zu müssen.
 
Da man hier ja immer mit den wildesten Ideen rechnen muss, stell ich einfach mal die Frage...

@tester:
Du willst aber ned dein eigenes Script parsen ? 8O
Wenn doch, fopen(), fread(), fclose() und preg_match(), um das switch-Statement zu finden und die case-Konstanten zu bekommen.

(Kann ich überhaupt, das Script, was grade ausgeführt wird, mit Lesezugriff öffnen ? :think: Bin noch nie auf eine derart sinnlose Idee gekommen :ugly:)
 
Da man hier ja immer mit den wildesten Ideen rechnen muss, stell ich einfach mal die Frage...

@tester:
Du willst aber ned dein eigenes Script parsen ? 8O
Wenn doch, fopen(), fread(), fclose() und preg_match(), um das switch-Statement zu finden und die case-Konstanten zu bekommen.

(Kann ich überhaupt, das Script, was grade ausgeführt wird, mit Lesezugriff öffnen ? :think: Bin noch nie auf eine derart sinnlose Idee gekommen :ugly:)

Ne selbst wollt ich es ja nicht machen, dachte da eher an so ne Funktion á la get_defined_switch_names/vars(). Naja dann muss ichs wohl doch manuell in ein Array schreiben und warten bis es irgendwann mal in PHP "geht", falls das überhaupt möglich ist :D
 
Ich versteh nur den Sinn ned :hö:

In den case-Statements stehen ausschließlich Konstanten und diese kennst du wohl doch am besten :roll:
 
Ich versteh nur den Sinn ned :hö:

In den case-Statements stehen ausschließlich Konstanten und diese kennst du wohl doch am besten :roll:

Jo, aber um z.B. eine URL zu generieren müsste man es erst alles in ein Array schreiben. Wäre ja nur so falls "sehr" viele cases vorkommen würden, wäre die "Maschine" unfehlbarer als es manuell zu machen, soll nurn Bsp. sein.
 
in deiner switch wirst du wohl eh für alle anweisungen das selbe machen. lediglich das ziel wird sich unterscheiden. also nimm doch direkt nen array und verzichte ganz auf die switch, für sowas brauchst du die eh net.
 
Irgendwie glaube ich, hast du den Sinn von switch() "leicht" verfehlt :roll:
Wenn ein Array besser geeignet is, dann nehm halt auch ein Array ;)

tw., z.B. kann man ja nicht immer die Konstanten wissen, wenn man z.B. ein verschlüsseltes Script hat und dort die Konstanten nirgends angegeben sind, oder? :D

Hab nochn Prob, bei mir wird bei mktime, wenn ich Tag/Monat 8 und 9 vorn ne Null hinhäng alles "verschoben" (4.4.0), liegts an der Version?

PHP:
  $mktime[] = mktime(00,00,00,06,07,2006); // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,08,2006); // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,09,2006); // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,10,2006); // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,6,07,2006);  // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,08,2006);  // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,09,2006);  // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,10,2006);  // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,06,7,2006);  // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,8,2006);  // = 08.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,9,2006);  // = 09.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,10,2006); // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,6,7,2006);   // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,8,2006);   // = 08.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,9,2006);   // = 09.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,10,2006);  // = 10.06.2006 - 00:00:00

  // ##### Ab hier Monat 8 #####
  $mktime[] = mktime(00,00,00,08,07,2006); // = 07.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,08,2006); // = 30.11.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,09,2006); // = 30.11.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,10,2006); // = 10.12.2005 - 00:00:00

  $mktime[] = mktime(00,00,00,8,07,2006);  // = 07.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,08,2006);  // = 31.07.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,09,2006);  // = 31.07.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,10,2006);  // = 10.08.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,08,7,2006);  // = 07.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,8,2006);  // = 08.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,9,2006);  // = 09.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,10,2006); // = 10.12.2005 - 00:00:00

  $mktime[] = mktime(00,00,00,8,7,2006);   // = 07.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,8,2006);   // = 08.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,9,2006);   // = 09.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,10,2006);  // = 10.08.2006 - 00:00:00
 
wenn das wirklich rauskommt, wäre es nen bug. allerdings is gerade die fkt so alt, dass wahrscheinlich eher bei dir ein anderer fehler im skript existiert.
 
wenn das wirklich rauskommt, wäre es nen bug. allerdings is gerade die fkt so alt, dass wahrscheinlich eher bei dir ein anderer fehler im skript existiert.

Was isn ftk? So siehts aus, habs ja erst gerade erstellt, weils mir am 9.11. aufgefallen ist :D

PHP:
<?php

  //include("index.php");

  $mktime[] = mktime(00,00,00,06,07,2006); // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,08,2006); // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,09,2006); // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,10,2006); // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,6,07,2006);  // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,08,2006);  // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,09,2006);  // = 31.05.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,10,2006);  // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,06,7,2006);  // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,8,2006);  // = 08.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,9,2006);  // = 09.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,06,10,2006); // = 10.06.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,6,7,2006);   // = 07.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,8,2006);   // = 08.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,9,2006);   // = 09.06.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,6,10,2006);  // = 10.06.2006 - 00:00:00

  // ##### Ab hier Monat 8 #####
  $mktime[] = mktime(00,00,00,08,07,2006); // = 07.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,08,2006); // = 30.11.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,09,2006); // = 30.11.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,10,2006); // = 10.12.2005 - 00:00:00

  $mktime[] = mktime(00,00,00,8,07,2006);  // = 07.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,08,2006);  // = 31.07.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,09,2006);  // = 31.07.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,10,2006);  // = 10.08.2006 - 00:00:00

  $mktime[] = mktime(00,00,00,08,7,2006);  // = 07.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,8,2006);  // = 08.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,9,2006);  // = 09.12.2005 - 00:00:00
  $mktime[] = mktime(00,00,00,08,10,2006); // = 10.12.2005 - 00:00:00

  $mktime[] = mktime(00,00,00,8,7,2006);   // = 07.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,8,2006);   // = 08.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,9,2006);   // = 09.08.2006 - 00:00:00
  $mktime[] = mktime(00,00,00,8,10,2006);  // = 10.08.2006 - 00:00:00


  foreach($mktime AS $key => $value)
    {
      print(date("d.m.Y - H:i:s", $value));
      print("\n");
    }

?>
 
Was isn ftk? So siehts aus, habs ja erst gerade erstellt, weils mir am 9.11. aufgefallen ist :D

PHP:
<?php
  $mktime[] = mktime(00,00,00,06,07,2006); // = 07.06.2006 - 00:00:00
...

mktime erwartet int:

PHP:
int mktime ( [int Stunde [, int Minute [, int Sekunde [, int Monat [, int Tag [, int Jahr [, int is_dst]]]]]]] )

also macht deine anweisung von vorn herein keinen sinn, denn weder 00, noch 06, noch 07 sind int-zahlen. wenn falsche ergebnisse rauskommen, dann bist du selbst schuld.

und zu deinem GET-problem ... du hast z.b. mit array_keys($_GET) alle geschalteten switches bereits in einem array verfügbar. ich fürchte nur, dass du deine bezeichnung für "switches" (flags) mit dem programmier-token "switch" verwechselst. das hat nichts miteinander zu tun.

[edit] vollkommenen blödsinn gelöscht. hab nicht richtig gelesen, sorry [/edit]
 
Zuletzt bearbeitet:
lass die null weck! die null sagt php es ist ne octal zahl... sprich ne zahl auf basis von 8. und da die basis 8 ist gibt es keine 8 und 9 mehr. also kannst du nicht 08 und 09 schreiben... weil da wie du zeihst quatsch rauskommt.