'true' в переменных Get
В PHP, когда у вас есть что-то в URL-адресе, например "var = true" в URL-адресе, отображаются ли "истина" и "ложь" в URL-адресе для логических переменных или они равны тексту "true", или "ложь"? Например, с URL, имеющим в нем "var = false":
if ($_GET['var'] == false) { ... }
работать? Или переменная всегда будет истиной, поскольку в ней есть текст?
Ответы
Ответ 1
Они передаются как строки, поэтому они всегда правдивы, если только они не являются одним из них, которые вместо этого вычисляются как false:
- Пустая строка
''
- Строка, содержащая нулевую цифру
'0'
Чтобы упростить мою жизнь, я просто передаю логические переменные GET как 1
или 0
и проверяю их как одно из этих значений или правильно определяем значение по умолчанию:
// Default value of false
$var = false;
if (isset($_GET['var']))
{
if ($_GET['var'] === '1' || $_GET['var'] === '0')
{
$var = (bool) $_GET['var'];
}
}
Ответ 2
Нет, $_GET
всегда будет содержать только строки.
Однако вы можете filter его получить логическое значение.
FILTER_VALIDATE_BOOLEAN
:
Возвращает TRUE
для "1"
, "true"
, "on"
и "yes"
. Возвращает FALSE
в противном случае. Если FILTER_NULL_ON_FAILURE
установлено, FALSE
возвращается только для "0"
, "false"
, "off"
, "no"
и ""
, а NULL
возвращается для всех небулевых значений.
Пример:
$value = filter_input(INPUT_GET, "varname", FILTER_VALIDATE_BOOLEAN,
array("flags" => FILTER_NULL_ON_FAILURE));