使用此测试页:
$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”?
答案 0 :(得分:12)
正确的方式(在我看来)将是:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
即使您使用了新样式,也会遇到?page=0
(0
评估为false)的问题。 “新”并不总是更好......你必须知道何时才能使用它。
答案 1 :(得分:3)
不幸的是,您不能将它用于您希望用于的目的:
Expression expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
所以你仍然需要使用isset或empty() - ?:
运算符不包含isset检查。你需要使用的是:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
答案 2 :(得分:3)
为了完整起见,实现它的另一种方法是提取运营商级别:
$page = (int)$_GET["page"] or $page = 1;
然而,许多人认为这是不可读的,尽管它比isset()构造更短。
或者如果您正在使用输入对象或任何其他实用程序类:
$page = $_GET->int->default("page", 1);
答案 3 :(得分:2)
这是因为你试图对未定义的东西进行类型转换:(int)$ _GET ['page']
删除(int)或在条件行之后设置类型转换。
答案 4 :(得分:1)
如果你担心膨胀,辅助函数怎么样?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
然后你可以使用:
$page = get_or('page', 1);
这是干净的并处理未定义的值。