这里很简单的问题,但不确定答案。我可以通过get传递一个布尔变量吗?例如:
http://example.com/foo.php?myVar=true
然后我
$hopefullyBool = $_GET['myVar'];
$hopefullyBool
是布尔值还是字符串?我的假设是,它是一个字符串,但有人可以告诉我吗?感谢
答案 0 :(得分:16)
所有GET参数都是PHP中的字符串。要获取布尔类型,请将评估为true
或false
的内容传递为0
或1
,然后使用:
$hopefullyBool = (bool)$_GET['myVar'];
如果您想传递字符串true
或false
,请:
$hopefullyBool = $_GET['myVar'] == 'true' ? true : false;
甚至更好:
" 1"," true"," on"和"是"。否则返回FALSE。
$hopefullyBool = filter_var($_GET['myVar'], FILTER_VALIDATE_BOOLEAN);
答案 1 :(得分:3)
如果你想避免使用if语句:
filter_var('true', FILTER_VALIDATE_BOOLEAN);
//bool(true)
filter_var('false', FILTER_VALIDATE_BOOLEAN);
//bool(false)
答案 2 :(得分:2)
它将作为字符串传递。虽然您可以使用bool强制转换它,但建议在某些情况下不要这样做。
如果myVar ==“True”
,你会更好要小心:
>>> bool("foo")
True
>>> bool("")
False
空字符串计算结果为False,但其他所有内容的计算结果为True。所以这不应该用于任何解析目的。
答案 3 :(得分:0)
有几种方法可以做到。首先,我们可以使用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']));
答案 4 :(得分:0)
如果我确定唯一传递的是一个布尔值, 我通常只检查它是否等于字符串“true” 如果是,则返回真,否则返回假
$is_true= $_GET['is_true'] == "true";