Php Switch Case не работает должным образом - PullRequest
0 голосов
/ 25 апреля 2018

Я сделал довольно глупую логическую ошибку в очень простом PHP скрипте.

См. U_mulders Ответ за заключение.

Скрипт обращается к переменной $ _GET [] и должен просто определить, установлена ​​ли переменная (которая работает) и имеет ли она значение выше 0 (это не работает должным образом).

А вот и файл «switch.php»:

<?php

if($_GET["variable"]==NULL){
    die('Set $_GET["variable"] to use this Script!');
}

//Create Instance of $_GET["variable"] casted to Integer
$variable = (integer)$_GET["variable"];

//this var_dump displays that the $variable is succesfully casted to an Integer
var_dump($variable);

switch ($variable) {
    case ($variable > 0):
        echo "You entered $variable!";
        break;

    default:        
        echo "Either Your variable is less than 0, or not a Number!";
        break;
}

?>

Теперь я ожидал, что первый оператор Case будет запущен, только если переменная $ больше 0.

Это не тот случай, если я открою URL: http://www.someserver.com/switch.php?variable=0

Вывод выглядит следующим образом:

... / switch.php: 11: int 0

Вы ввели 0!

Надеюсь, Вы сможете мне помочь.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Вы не можете использовать оператор сравнения в случае переключателя.Обратитесь к руководству по PHP.Вы можете использовать оператор if, чтобы сделать то, что вы ищете.

if($variable > 0){
  echo "You entered $variable!";
}else{
  echo "Either Your variable is less than 0, or not a Number!";
}  
0 голосов
/ 25 апреля 2018
switch (true) {
    case ($variable > 0):
        echo "You entered $variable!";
        break;

    default:        
        echo "Either Your variable is less than 0, or not a Number!";
        break;
}
0 голосов
/ 25 апреля 2018

Я думаю, вы неправильно поняли, как работает переключатель ..

switch (VAR-TO-COMPARE){
    case VAL-TO-BE-COMOARED: do something
}

Итак, что происходит в вашем сценарии, вы сравниваете целочисленное значение, хранящееся в переменной $ (0 в вашем примере), с логическим значением, которое является результатом логического уравнения $variable > 0. В этом случае ваше целочисленное значение неявно преобразуется в логическое значение TRUE, поэтому, если вы вставите число, ваш переключатель всегда будет переходить к первому случаю вашего переключателя.

Вы можете использовать оператор if, который будет более читабельным и эффективным

if ($variable > 0){
    do something
} else{
    do something else
}
0 голосов
/ 25 апреля 2018

Итак, $variable - 0, регистр $variable > 0, который 0 > 0 - false.

Сравните 0 и false.Что вы получаете?Конечно - верно.

Перепишите свой switch на:

// compare not `$variable` but result of some operation with `true`
switch (true) {           
    case ($variable > 0):
        echo "You entered $variable!";
        break;

    default:        
        echo "Either Your variable is less than 0, or not a Number!";
        break;
}
...