Странное поведение в операторе переключения

Я пишу код для сортируемой таблицы, где щелчок по ссылкам в заголовке изменяет ORDER BY, выполняемый при создании набора результатов поиска (случай, когда нет допустимого порядка по, приводит к тому, что запрос не запускается с порядком по и просто возвращает результаты в том порядке, в котором база данных возвращается. это как задумано). Код пишется в рамках, предоставленных моим работодателем.

Для проверки части запроса ORDER BY я запускаю ввод с помощью следующей функции проверки.

<?php
function sortMode ($name)
{
    $mode   = '';
    switch ($name)
    {
        case 'resnum'   : $mode = 'b_resnum';            break;
        case 'state'    : $mode = 'st_id';               break;
        case 'name'     : $mode = 'lastname, firstname'; break;
        case 'phone'    : $mode = 'phone';               break;
        case 'email'    : $mode = 'email';               break;
        case 'opened'   : $mode = 'cs_created';          break;
        default         : $mode = '';                    break;
    }
    return ($mode);
}
?>

В процессе тестирования я обнаружил, что если параметр не указан, порядок сортировки будет повторным. После некоторых экспериментов я обнаружил, что фильтрация, встроенная в фреймворк, заставляет запрос неинициализированной переменной, такой как неустановленный параметр GET, возвращать целое число 0. Если в приведенный выше код на вход поступило целое число 0, он всегда будет следовать первому доступному ему пути выполнения.

В качестве эксперимента я попытался изменить порядок наблюдений в операторе switch и обнаружил, что все, что было наверху, было бы тем, что было бы выполнено, если бы этой функции было передано 0.

Решение проблемы заключалось в использовании switch (strval ($ name)) , поэтому конкретная проблема решена, но теперь мне любопытно, каково общее поведение операторов переключения PHP. Является ли поведение, которое я наблюдал, правильным для PHP? Есть ли какая-то ошибка в PHP, которая вызывает это, или я сделал ошибку в моем коде, о которой я не знаю?

7
задан GordonM 19 January 2017 в 14:58
поделиться