【问题标题】:'true' in Get variables获取变量中的“真”
【发布时间】:2011-03-24 00:46:52
【问题描述】:

在 PHP 中,当 URL 中有类似“var=true”的 URL 时,URL 中的 'true' 和 'false' 会被转换为布尔变量,还是等于文本 'true'还是“假”?例如,如果 url 中包含“var=false”:

if ($_GET['var'] == false) { ... }

工作?或者该变量是否始终为真,因为其中包含文本?

【问题讨论】:

    标签: php get boolean type-conversion


    【解决方案1】:

    不,$_GET 将始终只包含字符串。

    但是,您可以filter 获取布尔值。

    FILTER_VALIDATE_BOOLEAN:
    "1""true""on""yes" 返回 TRUE。否则返回FALSE。 如果设置了FILTER_NULL_ON_FAILURE,则只为"0""false""off""no""" 返回FALSE,并为所有非布尔值返回NULL

    例子:

    $value = filter_input(INPUT_GET, "varname", FILTER_VALIDATE_BOOLEAN,
        array("flags" => FILTER_NULL_ON_FAILURE));
    

    【讨论】:

    • 有点怪异但非常好用,+1。
    • @zerkms 好吧,但是你会有一个正确类型的变量,不需要检查isset,这个标志当然是可选的。
    【解决方案2】:

    它们是作为字符串传递的,所以总是真实的,除非它们是其中之一,而不是评估为 false:

    • 空字符串''
    • 包含数字零的字符串'0'

    为了让我的生活更轻松,我只需将布尔 GET 变量传递为 10 并验证它们是否是这些值之一,或者适当地决定一个默认值:

    // Default value of false
    $var = false;
    
    if (isset($_GET['var']))
    {
        if ($_GET['var'] === '1' || $_GET['var'] === '0')
        {
            $var = (bool) $_GET['var'];
        }
    }
    

    【讨论】:

    • 哇,PHP 有类型转换,这意味着它以另一种方式类似于 C++?甜!
    • @Nilbert: yeah.
    • @Nilbert 欢迎来到 PHP 的基础知识。 :) 类型在 PHP 中一直隐式转换。
    • " || $_GET['var'] === '0'" 条件分支在这里是多余的。 if (isset($_GET['var']) && $_GET['var'] === '1') { $var = true; }
    • @BoltClock:是的,您的示例非常好,因为它非常学术且易于理解。它分解得很好,说明了开发人员在解决此类任务时应该如何思考。
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多