Я пишу код для сортируемой таблицы, где щелчок по ссылкам в заголовке изменяет 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, которая вызывает это, или я сделал ошибку в моем коде, о которой я не знаю?