5 Stimmen

php verwenden Sie den Schalter ohne Unterbrechung;

Was stimmt nicht mit meinem Schalter? Jetzt Ergebnis:

< more
> less
= equality
!= no't equality 

So sollte es auch sein:

< more
= equality

<?php
$page = 99;

    switch ($page)
    {
        case $page < 121:
            echo '< more <br/>';
        case $page > 123:
            echo '> less <br/>';
        case $page == 99:
            echo '= equality <br/>';
        case $page != 99:
            echo '!= no\'t equality <br/>';
    }   
    ?>

14voto

VolkerK Punkte 93746

In Ihrer switch-Anweisung vergleichen Sie eine Zahl mit booleschen Werten.
Betrachten wir den ersten Fall $page < 121 es true Der Vergleich findet also statt 99==true das ist true laut http://docs.php.net/language.types.type-juggling ( Schalter führt einen losen Vergleich durch, nicht einen strengen wie \=== ). Somit wird der erste Fallblock ausgeführt.
Und da Sie nicht über eine Pause Anweisung wird zum nächsten Fallblock übergegangen und zum nächsten und so weiter...
Bedeutet: Dies wird nicht wie vorgesehen funktionieren, unabhängig davon, ob Sie break oder nicht.

10voto

Turtle Punkte 1300

Sie scheinen nicht zu verstehen, wie ein Schalter funktioniert. Was Sie wollen, ist eine Reihe von if-Anweisungen, d.h.

        if ($page < 121)
            echo '< more <br/>';
        if ($page > 123)
            echo '> less <br/>';
        if ($page == 99)
            echo '= equality <br/>';
        if ($page != 99)
            echo '!= no\'t equality <br/>';

7voto

Raj Punkte 83

Switch ist nur zu verwenden, wenn Sie eine Variable mit einer Reihe von Werten vergleichen wollen.

switch ($variable)
{
   case "me":
       echo "variable is me";
      break;

   case "you":
       echo "variable is you";
       break;
   default:
      echo "Variable is neither of us";

}

Der obige Switch-Case-Block kann wie folgt geschrieben werden:

if ($variable=="me")
{
   echo "variable is me";
}
elseif ($variable=="you")
{
   echo "variable is you";
}
else
{
  echo "variable is neither of us";
}

Setzen Sie KEINEN Ausdruck in die Nähe der case-Anweisung.

switch ($somethng)
{
     case $something < 10:
      break;
     case $something > 20:

     break;
}

Switch ist nur für den Vergleich einer Variablen mit einer Reihe von Werten gedacht. NUR! Für alles andere verwenden Sie eine if...elseif..else-Anweisung.

Der obige Block ist eine falsche Verwendung. Manchmal kann mehr als einer dieser Ausdrücke wahr sein.

1voto

Zsolt Punkte 35
$var = "cat";

switch($var)
{
  case "cat":
     echo 'My '.$var.' is called Bob.';
    break;
  case "dog":
     echo 'My '.$var.' is called James.';
    break;
  default:
     echo "I don't have an animal";
    break;
}

In einer switch-Anweisung vergleicht man $var mit einem Wert in einem Fall. Wenn es eine Übereinstimmung gibt, wird der aktuelle Fall ausgeführt, andernfalls wird der Standardwert ausgeführt. Sie können <>!=... in einem case nicht verwenden, nur Werte wie: 1, '1', 'Hund', $var2, usw.

Wenn Sie denselben Befehl für zwei Fälle ausführen möchten, können Sie dies tun:

$var = "cat";

switch($var)
{
  case "cat":
  case "dog":
     echo 'My '.$var.' is called James.';
    break;
  default:
     echo "I don't have an animal";
    break;
}

In Ihrem Code haben Sie vergessen, break; am Ende eines jeden Falles zu setzen, deshalb sehen Sie 'alles' in Ihrer Ausgabe. Und Sie vermissen auch default:.

Für die Aufgabe, die Sie bearbeiten, empfehle ich Ihnen, if-Anweisungen zu verwenden.

0voto

user427678 Punkte 21

Wenn ich mich nicht irre, können Sie die Zeichen < > raw nicht in HTML verwenden. Verwenden Sie stattdessen die Zeichen > und <.

Wenn Sie das Skript in der Befehlszeile ausführen, erhalte ich folgende Ausgabe.

<?php
ob_start();
$page = 99;

switch ($page)
{
    case $page < 121:
        echo '< more <br/>';
    case $page > 123:
        echo '> less <br/>';
    case $page == 99:
        echo '= equality <br/>';
    case $page != 99:
        echo '!= no\'t equality <br/>';
}

$buffer = ob_get_clean();

echo str_replace('<br/>', "\n", $buffer);

Ausgabe

< more 
> less 
= equality 
!= no't equality

was das richtige Verhalten zu sein scheint.

Es ist wichtig zu verstehen, wie die switch-Anweisung ausgeführt wird, um um Fehler zu vermeiden. Die switch Anweisung wird Zeile für Zeile ausgeführt (eigentlich Anweisung für Anweisung). In Anfang wird kein Code ausgeführt. Erst wenn eine case-Anweisung gefunden wird mit einem Wert, der mit dem Wert des dem switch-Ausdruck übereinstimmt, beginnt PHP mit der Ausführung der Anweisungen. PHP fährt fort, die Anweisungen auszuführen bis zum Ende des switch-Blocks, oder das erste Mal, wenn es eine break Anweisung sieht.

http://de.php.net/manual/de/control-structures.switch.php

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X