2 回答
TA貢獻1820條經驗 獲得超9個贊
根據 PHP 手冊中“確定變量類型”下的外部源變量:
HTTP 是一種文本協議,大多數(如果不是全部)來自超全局數組的內容(例如 $_POST 和 $_GET)將保留為字符串。PHP 不會嘗試將值轉換為特定類型。
同樣,在手冊的常見問題解答:HTML 表單中的數組中,我們讀到了數組:
要將
<form>結果作為數組發送到 PHP 腳本,您可以像這樣 命名<input>,<select>或元素:<textarea><input name="MyArray[]" /> ...
這將變成一個查詢字符串?MyArray[]=foo&MyArray[]=bar等,可用作$_GET['MyArray'][0]和$_GET['MyArray'][1]。您還可以使用命名鍵;查詢?var[x]=one&var[y]=two將產生關聯數組$_GET['var] = ['x' => 'one', 'y' => 'two'];并將?var[x][]=deep成為$_GET['var']['x'] = ['deep']等
此外,該手冊還$_GET注明了以下內容:
注意: GET 變量通過urldecode()?傳遞。
然后,查看簽名urldecode:
urldecode?(?string?$str?)?:?string
換句話說,用于預處理$_GET值的函數接受一個字符串并返回一個字符串。顯然,當傳入一個數組時,它將應用于urldecode該數組的每個字符串值。(如果有人想找到負責生成 的 PHP 源代碼部分$_GET,請分享鏈接,將其包含在此處。)
請注意,空值(例如 in??foo&bar=1)不會導致[foo] NULL,而是導致 in?,[foo] string(0) ""換句話說,結果為零長度string。我們再次得到[bar] string(1) "1".?沒有將值類型轉換get為post整數、浮點數、布爾值或 null。
總之,接收到的可能數據類型$_GET是stringand?array(字符串;或進一步的數組;最后的標量“葉子”是字符串)。當然,如果你在 PHP 代碼中顯式聲明$_GET['foo'] = nullor?$_GET['bar'] = 1,那么就會有整數和空值。上述內容適用于 PHP 從外部源解析的變量。
更新:雖然上述內容對于從查詢字符串解析的所有值都是正確的,但對于PHP 從查詢字符串中提取的鍵來說情況有所不同。假設以下 URL:
test.php?101=foo&202=bar&dev=ops
現在,var_dump(array_keys($_GET))數字鍵會返回什么?整數,而不是字符串:
array(3)?{
????[0]?·?int(101)
????[1]?·?int(202)
????[2]?·?string(3)?"dev"}這符合 PHP數組鍵的標準轉換:“包含有效十進制整數的字符串,除非數字前面有 + 號,否則將轉換為整數類型。?”。然而,以下關鍵轉換不會發生:“浮點數也轉換為整數,這意味著小數部分將被截斷?!?因為(如來自外部源的變量中所述):“[外部]變量名稱中的點和空格將轉換為下劃線?!?/em>
外部變量類型轉換:總結
查詢字符串的值將始終是strings或以字符串作為最終標量值的數組(數組的)。
查詢字符串的鍵將始終是strings,除了被轉換為整數的整數(無符號正數:
3,-3有符號負數:) 。
TA貢獻1821條經驗 獲得超6個贊
查詢字符串本身是 a string,但其中的變量可以解析為stringor array:
url.com?var=123=> var 是字符串
url.com?var[]=123&var[]=321=> var 是一個數組
- 2 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
