通过 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=1
或myVar=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。
另一种获取布尔类型的方法,将计算结果传递给true
或false
,例如0
或1
:
http://example.com/foo.php?myVar=0
http://example.com/foo.php?myVar=1
然后转换为布尔值:
$hopefullyBool = (bool)$_GET['myVar'];
如果你想传递字符串true
或false
那么另一种方式:
$hopefullyBool = $_GET['myVar'] == 'true' ? true : false;
但我想说filter_var
和FILTER_VALIDATE_BOOLEAN
是为此而生的。
【讨论】:
这个和“$hopefullyBool = 'true' === $_GET['myVar'];”有什么区别吗? K,谢谢,所以应该是一样的。我担心我用错了方法。 (bool) 会将“假”转换为真 @John:是的,这就是为什么我的(bool)
示例使用 0 和 1 而不是“真”和“假”。
有一个例外:http://example.com/foo.php?myVar[]=0
http://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'];
这将产生一个布尔值true
或false
,具体取决于$_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 传递布尔值的主要内容,如果未能解决你的问题,请参考以下文章