5

使用此测试页面:

$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”?

4

5 回答 5

12

正确的方法(在我看来)是:

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

即使您使用新样式,您也会遇到问题?page=00评估为假)。“新”并不总是更好……您必须知道何时使用它。

于 2010-11-17T23:24:18.090 回答
3

不幸的是,您不能将其用于您希望将其用于的目的:

表达式 expr1 ?:如果 expr1 的计算结果为 TRUE,则 expr3 返回 expr1,否则返回 expr3。

因此,您仍然必须使用 isset 或 empty() -?:运算符不包括 isset 检查。您需要使用的是:

$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
于 2010-11-17T23:24:25.470 回答
3

为了完整起见,实现它的另一种方法是拉操作员等级:

 $page = (int)$_GET["page"]  or  $page = 1;

然而,许多人认为这是不可读的,尽管它比 isset() 结构短。

或者,如果您正在使用输入对象或任何其他实用程序类:

 $page = $_GET->int->default("page", 1);
于 2010-11-17T23:56:55.820 回答
2

这是因为您正在尝试对未定义的内容进行类型转换: (int) $_GET['page']

删除 (int) 或在条件行之后设置类型转换。

于 2010-11-17T23:18:11.620 回答
1

如果您担心膨胀,那么辅助函数怎么样?

function get_or($index, $default) {
    return isset($_GET[$index]) ? $_GET[$index] : $default;
}

那么你可以使用:

$page = get_or('page', 1);

它很干净并且可以处理未定义的值。

于 2010-11-18T00:44:31.730 回答