Обрабатывает ли 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, останется в виде строк.