[英]Using PHP 5.3 ?: operator
有了這個測試頁面:
$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
評估為false)。 “新”並不總是更好......你必須知道何時使用它。
不幸的是,你不能將它用於你想用它的目的:
表達式expr1?:expr3如果expr1的計算結果為TRUE則返回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);
這是干凈的,處理未定義的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.