通过 PHP GET 传递布尔值

Posted

技术标签:

【中文标题】通过 PHP GET 传递布尔值【英文标题】:Passing a boolean through 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 脚本中轻松转换为布尔值。 好点。我就是这么想的,谢谢大家 试试:how-to-convert-string-to-boolean-php 【参考方案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_array 和 filter_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";

【讨论】:

以上是关于通过 PHP GET 传递布尔值的主要内容,如果未能解决你的问题,请参考以下文章

将布尔值从 Ajax 传递到 PHP

Python 在函数之间传递变量(布尔值)

php 代码数组布尔值返回

不能通过引用传递android中的布尔变量

通过 Ajax 将布尔值传递给 asp.net api 控制器

如何通过 Node + Express + Mongoose 中的单选按钮传递布尔值?