2017-12-28 10 views
1

Ich verwende einen Schalter, um den Wert einer Variablen zu testen. Die Variable $sizeTotal kann entweder eine Zeichenfolge oder eine Zahl enthalten. Im folgenden Beispiel erwarte ich, dass der Schalter den Standardfall auslöst.
Allerdings geht es auf den ersten Fall jedes Mal, und ich weiß nicht, warum ...Switch-Fall ignoriert Bedingungen in PHP

$sizeTotal = "test"; 
$extraCharges['2'] = 1000; 

switch ($sizeTotal) { 
    case ($sizeTotal < $extraCharges['2']): 
     $var = 40; 
     return $var; 

    case ($sizeTotal >= $extraCharges['2']): 
     $var = 60; 
     return $var; 

    default: 
     $var = 1000; 
     return $var; 
} 
+3

Sie verwenden die switch-Anweisung falsch, es ist für die Überprüfung eines einzelnen Wertes einer Variablen gedacht, keine Bedingung. Sie möchten wahrscheinlich eine else-if-Konstruktion verwenden, die Bedingungen überprüfen kann. http://php.net/manual/en/control-structures.switch.php – Niels

+1

Die Zeichenfolge wird in 0 konvertiert und 0 ist weniger als 1000. aus diesem Grund ist Ihre erste Bedingung wahr. –

Antwort

7

Vom docs

Wenn Sie eine Zahl mit einem String vergleichen oder der Vergleich umfasst numerische Zeichenfolgen, dann wird jede Zeichenfolge in eine Zahl konvertiert und der Vergleich numerisch durchgeführt. Diese Regeln gelten auch für die switch-Anweisung. Die Typumwandlung findet nicht statt, wenn der Vergleich === oder! == ist, da hier sowohl der Typ als auch der Wert verglichen werden.

Sie platzieren eine Zeichenfolge in einem Vergleich.

Verwandte Themen