使用此测试页面:
$page = (int) $_GET['page'] ?: '1';
echo $page;
我不明白页面未定义时得到的输出:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
为什么会出现错误信息?它是 PHP 5.3;为什么它不回显“1”?
正确的方法(在我看来)是:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
即使您使用新样式,您也会遇到问题?page=0
(0
评估为假)。“新”并不总是更好……您必须知道何时使用它。
不幸的是,您不能将其用于您希望将其用于的目的:
表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。
因此,您仍然必须使用 isset 或 empty() -?:
运算符不包括 isset 检查。您需要使用的是:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
为了完整起见,实现它的另一种方法是拉操作员等级:
$page = (int)$_GET["page"] or $page = 1;
然而,许多人认为这是不可读的,尽管它比 isset() 结构短。
或者,如果您正在使用输入对象或任何其他实用程序类:
$page = $_GET->int->default("page", 1);
这是因为您正在尝试对未定义的内容进行类型转换: (int) $_GET['page']
删除 (int) 或在条件行之后设置类型转换。
如果您担心膨胀,那么辅助函数怎么样?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
那么你可以使用:
$page = get_or('page', 1);
它很干净并且可以处理未定义的值。