通过PHP GET传递布尔值

25

这里有一个非常简单的问题,不确定答案。我能通过GET方法传递布尔型变量吗?例如:

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

然后我有

$hopefullyBool = $_GET['myVar'];

$hopefullyBool是布尔值还是字符串? 我的假设是它是字符串,但有人可以让我知道吗?谢谢


1
这是一个字符串。GET参数没有类型。 - Jonathan M
不,你需要将它变成布尔类型。 - Umren
2
使用 myVar=1myVar=0。然后您可以轻松地在 PHP 脚本中转换为布尔值。 - Jonathan M
1
好观点。这正是我所想的,谢谢大家。 - Sam Creamer
5个回答

48
所有的GET参数在PHP中都是字符串(或者是一个字符串数组)。使用filter_var(或filter_input)和FILTER_VALIDATE_BOOLEAN
  • 对于"1"、"true"、"on"和"yes",返回TRUE
  • 否则返回FALSE
  • 如果设置了FILTER_NULL_ON_FAILURE,则只有对于"0"、"false"、"off"、"no"和""才返回FALSE,对于所有非布尔值都返回NULL
$hopefullyBool = filter_var($_GET['myVar'], FILTER_VALIDATE_BOOLEAN);

对于可以是数组的 INPUT 变量,有 filter_var_arrayfilter_input_array
获取布尔类型的另一种方法是传递一个评估为 true 或 false 的值,如 0 或 1。
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'];"有任何区别吗? - Agash Thamo.
好的,那就应该是一样的了。我担心我用错方法了。 - Agash Thamo.
(bool) 会将 "false" 转换为 true。 - John
@John:是的,这就是为什么我的(bool)示例使用0和1而不是“true”和“false”。 - AbraCadaver
@DanAlexson90:这就是为什么有https://www.php.net/manual/en/function.filter-var-array.php - AbraCadaver
显示剩余2条评论

5

如果你想避免使用 if 语句:

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

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

3

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

最好使用if myVar ==“True”

请注意:

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

空字符串会被视为False,但其他任何内容都会被视为True。因此,它不应该用于任何解析目的。


2
有几种方法可以实现。首先,我们可以使用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将抛出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"翻译成中文是"最初的回答"。

0

如果我确定传递的是布尔值,通常只需检查它是否等于字符串"true",如果是,则返回true,否则返回false。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接