Я пишу код для сортируемой таблицы, где щелчок по ссылкам в заголовке изменяет 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);
}
?>
При тестировании я обнаружил, что если параметр не был предоставлен, порядок сортировки будет resnum. После некоторых экспериментов я обнаружил, что фильтрация, встроенная в фреймворк, вызовет запрос для неинициализированной переменной, такой как параметр unset GET, для возврата целого числа 0. Если вышеприведенный код получил питание в качестве его целого числа, он всегда будет следовать за первым путь выполнения, доступный для него.
В качестве эксперимента я попытался переупорядочить порядок дел в инструкции switch и нашел, что было наверху, это то, что было выполнено, если эта функция была передана 0.
Решение проблемы состояло в использовании switch (strval($name))
, поэтому конкретная проблема решена, но теперь мне любопытно относиться к общему поведению операторов переключения PHP. Является ли поведение я свидетелем правильного поведения для PHP? Есть ли какая-то ошибка в PHP, которая вызывает это, или я сделал ошибку в своем коде, о котором я не знаю?