【发布时间】:2011-05-05 03:05:38
【问题描述】:
我正在为可排序表编写代码,其中单击标题中的链接会更改生成一组搜索结果时执行的 ORDER BY(没有有效 order by 的情况会导致查询无法运行使用 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。经过一些实验,我发现框架中内置的过滤会导致对未初始化变量(例如未设置的 GET 参数)的请求返回整数 0。如果上面的代码得到一个 0 整数作为其输入,它将始终遵循第一个可用的执行路径。
作为一个实验,我尝试在 switch 语句中重新排列 case 的顺序,发现如果这个函数被传递一个 0,那么顶部的内容就是执行的内容。
问题的解决方案是使用switch (strval($name)),因此特定问题得到了解决,但现在我对 PHP switch 语句的一般行为感到好奇。我目睹的行为是 PHP 的正确行为吗? PHP 中是否存在导致此问题的错误,或者我在代码中犯了一个我不知道的错误?
【问题讨论】:
标签: php switch-statement