题
使用此测试页:
$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);
这是干净和把手未定义的值。
不隶属于 StackOverflow