Direkt geht es, mit switch - case NICHT

  • Themenstarter Themenstarter andyK
  • Beginndatum Beginndatum
A

andyK

Hallo,

ich habe zwei PHP Dateien.
In der einen (class.popups.php) sind mehrere Klassen:

PHP:
class all
{
  function standard($inhalt)
  {
    global $conf, $all;

    $tpl = tplload("popups.tpl");

    echo tplprint($tpl, array_merge(array(
    "inhalt" => $inhalt)) );
    exit;
  }
}

class format
{
	function getsite()
	{
	   global $conf, $HTTP_GET_VARS, $all;

	   $inhalt = "hallo";
	   
	   return $inhalt;
	   $all->standard($inhalt);

	}
}

// usw.

Die zweite PHP Datei sieht so aus:

PHP:
<?php

require("lib/class.popups.php");
require("lib/class.calc.php");
$all = new all;
switch($HTTP_GET_VARS["seite"])
  {
    case "format": $configure= new format; break;
    case "deckung": $configure = new deckung; break;
    case "papier": $configure = new papier; break;
    case "veredelung": $configure = new veredelung; break;
    case "edit": $configure = new edit; break;
    case "more_edit": $configure = new more_edit; break;


    default: $all->standard($configure->getsite());
  }

Wenn ich nun folgenden Link aufrufe
<a href="popups.php?seite=format">Format</a>
passiert nichts. Gar nichts!

Wenn ich aber den switch entferne und stattdessen

PHP:
$all = new all;
$format = new format;
$all->standard($format->getsite());

schreibe, wird das Template geöffnet.

Warum geht das mit dem switch nicht?
 
Zuletzt bearbeitet von einem Moderator:
Ganz einfach: Du hast evtl. den default-Bereich in der Switch-Case falsch verstanden. Das ist soetwas wie ein ELSE .. und wird sozusagen nur dann ausgeführt wenn in den obigen Bedingungen keine zutrifft. So sollte es aussehen:
PHP:
$all = new all; 
switch($HTTP_GET_VARS["seite"]) 
  { 
    case "format": $configure= new format; break; 
    case "deckung": $configure = new deckung; break; 
    case "papier": $configure = new papier; break; 
    case "veredelung": $configure = new veredelung; break; 
    case "edit": $configure = new edit; break; 
    case "more_edit": $configure = new more_edit; break; 

    default: $configure = // das was es ist wenn nichts oben zutrifft
  } 

$all->standard($configure->getsite());
 
Hi!

Für das was Du vor hast ist evtl. -> singleton <- die richtige Lösung.

Singleton kan eine Klasse zur Verwaltung von Klassen sein.

Such mal in Google nach php singleton


Greetz Danilo
 
Hallo,

es hat sich nichts an der Situation verändert.
Da die Links ja definiert sind, tritt ja immer eins von den case Bedingungen auf.
 
Original geschrieben von andyK
Hallo,

es hat sich nichts an der Situation verändert.
Da die Links ja definiert sind, tritt ja immer eins von den case Bedingungen auf.

Na dann lässt du den Bereich default einfach weg. Das dürfte dann soweit richtig sein. Vielleicht solltest du an der Stelle noch das $HTTP_GET_VARS['seite'] durch $_GET['seite'] ersetzen. Das ist neuerer Standard ... kommt aber an der Stelle auf die PHP-Version an. Ich nehme aber mal an, dass eine neuere Version bei dir installiert ist.
 
:confused:
Ich hab jetzt noch eine if-Bedingung mit eingebaut, also

if (HTTP_GET_VARS["blub"]
$all->standard($configure->blub());
else
$all->standard($configure->getsite());

Und nun gehts, so wie es soll.
Nur das laden dauert ziemlich lange.
 
Zurück