簡體   English   中英

使用PHP 5.3?:運算符

[英]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=00評估為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM