Гарантирован ли порядок пар ключ-значение в суперглобальном $ _GET? - PullRequest
3 голосов
/ 22 июля 2011

Гарантируется ли порядок пар ключей-значений в суперглобальной переменной $ _GET в соответствии с тем, как пары полей-значений были получены в запрошенном URL-адресе?

Например, для данного URL-запроса, полученного веб-сервером:

index.php?a=1&foo=bar&b=2

... и этот код:

foreach ($_GET as $key => $value)
{
    echo $key . ": " . $value\n";
}

... результат всегда будет гарантированно равным:

a: 1
foo: bar
b: 2

Я не видел никаких упоминаний о порядке следования ключей в документации PHP по $ _GET или суперглобалам в целом. Это приводит меня к мысли, что на порядок пар ключ-значение нельзя полагаться.

Кто-нибудь знает, имеет ли ордер гарантированную согласованность с ним, или, что еще лучше, указывает на спецификацию / документ, который проясняет это?

Ответы [ 3 ]

3 голосов
/ 22 июля 2011

Лучше всего предположить, что они ненадежны по двум причинам.Во-первых, это не задокументировано.Вещи, которые не задокументированы, могут быть изменены без предварительного уведомления ... потому что, если они никогда не уведомляли вас в первый раз, зачем это нужно сейчас?Во-вторых, вы не можете быть на 100% уверены, что клиент каким-то образом не замаскирует данные.

1 голос
/ 22 июля 2011

Да, будет.Вы можете проверить исходный код по адресу main / php_variables.c, функция «SAPI_TREAT_DATA_FUNC».Существует простой цикл, который считывает переменные из строки запроса по порядку, а затем добавляет их в массив суперглобальных элементов (по порядку, с php_register_variable_ex ()), если они проходят фильтр.

0 голосов
/ 22 июля 2011

В PHP массивы представляют собой упорядоченную карту, а не простой хэш. Это означает, что заказ гарантирован, да.

Редактировать: опечатки

...