Обрабатывает ли PHP содержимое, которое входит в суперглобальные массивы, такие как $_POST и $_GET, как строки?

Я использую PHP 7.0.2 на моей машине с операционной системой Windows 10.

Я знаю, что обычно PHP определяет типы переменных и при необходимости преобразует их в нужный тип.

Но так как HTTP является текстовым протоколом, я сомневаюсь, что PHP обрабатывает контент, который входит в суперглобальные массивы, такие как $_POST и $_GET, как строки?

Например, рассмотрите ниже URL:

/index.php?var1=null&var2=123

Будет $_GET["var1"] содержать строку 'NULL' или значение типа NULL? Будет $_GET["var2"] содержать строку '123' или значение типа integer 123?

а о другом подобном контенте, который придет от других суперглобалов?

И особенно когда я повторяю или распечатываю любой контент, полученный от SUperglobal, он всегда будет автоматически преобразован в строковый тип?

Пожалуйста, направьте меня в этом отношении.

3 ответа

Самый простой способ узнать это проверить с помощью var_dump()

var_dump($_GET['var1']);
var_dump($_GET['var2']);

Затем используйте, например,

localhost?var1=null&var2=123

Пример вывода будет как

D:\xampp\htdocs\index.php:3:string '123' (length=3)
D:\xampp\htdocs\index.php:4:string 'null' (length=4)

Который отвечает на ваш вопрос

Используя ваш пример /index.php?var1=null&var2=123 и делать следующее:

  • $r = ($_GET['var2'] + 1) листья $r имеющий значение 124,
  • $r = $_GET['var2'] ."1" листья $r имеющий значение 1231,

Передача "ноль" в строке запроса (?var1=null) приведет к тому, что он будет обрабатываться как строка, иначе как бы вы могли передать строку со значением "null":]

PHP просто делает вещи на основе используемого контекста.

Да, они рассматриваются как строки в PHP.

Вы были на PHP-сайте руководства или читали что-то на его основе, потому что это из раздела " Определение типов переменных ".

ссылка: http://php.net/manual/en/language.variables.external.php

PHP включает в себя несколько функций, которые определяют тип переменной, например: gettype(), is_array(), is_float(), is_int(), is_object() и is_string(). Смотрите также главу о типах.

HTTP является текстовым протоколом, и большинство, если не все, содержимое, которое содержится в суперглобальных массивах, таких как $_POST и $_GET, останется в виде строк. PHP не будет пытаться преобразовать значения в определенный тип. В приведенном ниже примере $_GET["var1"] будет содержать строку "null" и $_GET["var2"], строку "123".

/index.php?var1=null&var2=123

Я согласен, что следующее утверждение немного сбивает с толку:

  • HTTP является текстовым протоколом, и большинство, если не все, содержимое, которое содержится в суперглобальных массивах, таких как $_POST и $_GET, останется в виде строк.
Другие вопросы по тегам