Я пишу код для сортируемой таблицы, где щелчок по ссылкам в заголовке изменяет ORDER BY, выполняемые при генерации набора результатов поиска (случай, когда нет допустимого порядка по причинам запрос не запускаться с порядком и просто возвращать результаты в том порядке, в котором возвращается база данных, как это было предусмотрено). Код записывается в рамках, предоставленных моим работодателем.Нечетное поведение в операторе switch
Для проверки части запроса 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. Если вышеприведенный код получил питание в качестве его целого числа, он всегда будет следовать за первым путь выполнения, доступный для него.
В качестве эксперимента я попробовал перестраивая порядок дел в заявлении выключателя, и обнаружил, что было на вершине будет то, что было выполнено, если эта функция была передана в 0.
Решение этой проблемы было используя switch (strval($name))
, поэтому конкретная проблема решена, но теперь мне любопытно относиться к общему поведению операторов переключения PHP. Является ли поведение я свидетелем правильного поведения для PHP? Есть ли какая-то ошибка в PHP, которая вызывает это, или я сделал ошибку в своем коде, о котором я не знаю?
+1 dang! Это опасное поведение. –
PHP может быть чистым злом. Это автоматическое преобразование int вызвало больше разочарований, чем «спасенное» время. – GWW
По крайней мере, в случае, если вы можете использовать === и предотвратить это, но, к сожалению, переключатель/case равен == – UnkwnTech