使用此测试页:

$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结果为假)。 “新建”的并不总是更好......你要知道的的使用它。

其他提示

可惜你不能使用它的目的,你想用它来做:

  

表达式表达式1:表达式3返回EXPR1如果expr1的值为true,和表达式3否则。

所以,你仍然必须使用isset或空() - 在?:操作不包括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 [ '页']

拆下(INT)或条件行之后设置的类型转换。

如果膨胀是您的关心,怎么样一个辅助功能?

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

那么你可以使用:

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

这是干净和把手未定义的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top