这里有一个非常简单的问题,不确定答案。我能通过GET方法传递布尔型变量吗?例如:
http://example.com/foo.php?myVar=true
然后我有
$hopefullyBool = $_GET['myVar'];
$hopefullyBool
是布尔值还是字符串? 我的假设是它是字符串,但有人可以让我知道吗?谢谢
FILTER_VALIDATE_BOOLEAN
:
$hopefullyBool = filter_var($_GET['myVar'], FILTER_VALIDATE_BOOLEAN);
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
是为了这个目的而设计的。(bool)
示例使用0和1而不是“true”和“false”。 - AbraCadaver如果你想避免使用 if 语句:
filter_var('true', FILTER_VALIDATE_BOOLEAN);
//bool(true)
filter_var('false', FILTER_VALIDATE_BOOLEAN);
//bool(false)
这将作为字符串传递。虽然您可以使用bool转换将其转换,但在某些情况下建议不要这样做。
最好使用if myVar ==“True”
请注意:
>>> bool("foo")
True
>>> bool("")
False
空字符串会被视为False,但其他任何内容都会被视为True。因此,它不应该用于任何解析目的。
(boolean)
方法,将字符串值转换为布尔值:
$hopefullyBool = (boolean)$_GET['myVar'];
这将导致一个布尔值true
或false
,具体取决于$_GET['myVar']
中的字符串值。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将抛出Undefined Index通知。为此,我们可以使用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']));
"Original Answer"翻译成中文是"最初的回答"。如果我确定传递的是布尔值,通常只需检查它是否等于字符串"true",如果是,则返回true,否则返回false。
$is_true= $_GET['is_true'] == "true";
myVar=1
或myVar=0
。然后您可以轻松地在 PHP 脚本中转换为布尔值。 - Jonathan M