'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));