【问题标题】:Passing a boolean through PHP GET通过 PHP GET 传递布尔值
【发布时间】:2014-07-26 15:31:57
【问题描述】:

这里的问题很简单,但不确定答案。我可以通过 get 传递一个布尔变量吗?例如:

http://example.com/foo.php?myVar=true

那我有

$hopefullyBool = $_GET['myVar'];

$hopefullyBool 是布尔值还是字符串?我的假设是它是一个字符串,但有人可以告诉我吗?谢谢

【问题讨论】:

  • 这是一个字符串。未输入 GET 参数。
  • 不,您需要将其设为布尔值
  • 请改用myVar=1myVar=0。然后,您可以在 PHP 脚本中轻松转换为布尔值。
  • 好点。我就是这么想的,谢谢大家

标签: php get boolean


【解决方案1】:

所有 GET 参数在 PHP 中都是字符串(或字符串数​​组)。使用filter_var(或filter_input)和FILTER_VALIDATE_BOOLEAN

为“1”、“true”、“on”和“yes”返回 TRUE。否则返回 FALSE

如果设置了FILTER_NULL_ON_FAILURE,则FALSE仅对“0”、“false”、“off”、“no”和“”以及NULL为所有非布尔值返回。

$hopefullyBool = filter_var($_GET['myVar'], FILTER_VALIDATE_BOOLEAN);

对于可以是数组的 INPUT 变量,有 filter_var_arrayfilter_input_array

另一种获取布尔类型的方法,将计算结果传递给truefalse,例如01

http://example.com/foo.php?myVar=0
http://example.com/foo.php?myVar=1

然后转换为布尔值:

$hopefullyBool = (bool)$_GET['myVar'];

如果你想传递字符串truefalse 那么另一种方式:

$hopefullyBool = $_GET['myVar'] == 'true' ? true : false;

但我想说filter_varFILTER_VALIDATE_BOOLEAN 是为此而生的。

【讨论】:

  • 这个和“$hopefullyBool = 'true' === $_GET['myVar'];”有什么区别吗?
  • K,谢谢,所以应该是一样的。我担心我用错了方法。
  • (bool) 会将“假”转换为真
  • @John:是的,这就是为什么我的 (bool) 示例使用 0 和 1 而不是“真”和“假”。
  • 有一个例外:http://example.com/foo.php?myVar[]=0http://example.com/foo.php?myVar[]=1这里myVar参数将是PHP中的array
【解决方案2】:

如果你想避免 if 语句:

filter_var('true', FILTER_VALIDATE_BOOLEAN);  
//bool(true)

filter_var('false', FILTER_VALIDATE_BOOLEAN); 
//bool(false)

【讨论】:

    【解决方案3】:

    它将作为字符串传递。虽然您可以使用 bool cast 进行转换,但建议在某些情况下不要这样做。

    如果 myVar == "True" 你最好这样做

    小心:

    >>> bool("foo")
    True
    >>> bool("")
    False
    

    空字符串评估为 False,但其他所有字符串评估为 True。所以这不应该用于任何类型的解析目的。

    【讨论】:

      【解决方案4】:

      有几种方法可以做到这一点。首先,我们可以使用 PHP 内置的 (boolean) 方法,它将字符串值转换为布尔值:

      $hopefullyBool = (boolean)$_GET['myVar'];

      这将产生一个布尔值truefalse,具体取决于$_GET['myVar'] 中字符串的值。

      从 v5.2.1 开始,我们还可以使用json_decode() 来确定布尔值:

      $hopefullyBool = json_decode($_GET['myVar]);

      json_decode() 方法将 JSON 对象(它是一个字符串)解析为 PHP 变量,并考虑了类型转换。因此,来自 URL 参数的字符串 'true' 将被强制转换为布尔值 true

      您可以同时使用上述两种方法,使用:

      $hopefullyBool = (boolean)json_decode($_GET['myVar]);

      为了减少在 URL 参数中传递的大写字符(例如 ?myVar=True?myVar=FALSE),您应该使用 strtolower() 方法,该方法会将字符串转换为所有小写字母:

      $hopefullyBool = (boolean)json_decode(strtolower($_GET['myVar]));

      最后,如果 URL 的查询字符串中不存在该参数,我们将回退到 false,否则 PHP 将抛出未定义索引通知。为此,我们可以使用isset() 方法:

      $hopefullyBool = false;
      if ( isset($_GET['myVar']) ) {
          $hopefullyBool = (boolean)json_decode(strtolower($_GET['myVar]));
      }
      

      为了缩短此时间,您可以使用如下条件语句启动 $hopefullyBool

      $hopefullyBool = isset($_GET['myVar']) && (boolean)json_decode(strtolower($_GET['myVar']));

      【讨论】:

        【解决方案5】:

        如果我确定唯一被传递的是布尔值, 我通常只是检查它是否等于 String "true" 如果是则返回true,否则返回false

        $is_true= $_GET['is_true'] == "true";

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-28
          • 2017-08-19
          • 2016-08-06
          • 1970-01-01
          • 2016-12-31
          • 2023-04-09
          • 2017-07-02
          相关资源
          最近更新 更多