如何检查未知var的值和类型

时间:2014-02-13 17:32:38

标签: php

我有一个可以是int或bool的变量,这是因为我查询它的数据库在某个时候将变量类型从bool更改为int,其中现在1为真,0为false。

由于php对于'==='是“微妙的”,我想问这是否正确,为什么要知道var是否为真:

if($wallet->locked === 1 || $wallet->locked === true)

我想通过这种方式我要求:是类型是int还是一个?或者是var类型bool和true?

你将如何处理这个问题?

3 个答案:

答案 0 :(得分:1)

您的代码是正确的方法。

它确实检查类型是integer且值是1,还是类型为boolean且值为true

在所有其他情况下,表达式($x === 1 || $x === true)将为false。

如果您知道您的变量已经是整数或布尔值,并且除了0评估为true之外的所有整数都可以,那么您可以使用:

if($wallet->locked) {

无论何时上述表达式都是如此,但对于-1, 2, 1000或任何其他非零整数的值也是如此。

答案 1 :(得分:0)

您的解决方案似乎很完美,但您也可以使用gettype。之后,您可以使用“integer”或“boolean”检查返回值。根据结果​​,您可以按照需要的方式处理数据。

解决方案#1 。如果$wallet的值为false0,那么PHP将无需检查其类型(因为&&运算符在PHP中是短路的):

$wallet = true;
//$wallet = 1;
if( $wallet && (gettype($wallet) == "integer" || gettype($wallet) == "boolean") )
{ echo "This value is either 'true and 1' OR it is '1 and an integer'"; }
else { echo "This value is not true"; }

解决方案#2 (取决于您想要实现的目标):

$wallet = 0;
//$wallet = 1; // $wallet = 25;
//$wallet = true;
//$wallet = false;
if($wallet)
{ echo "This value is true"; }
else { echo "This value is not true"; }

答案 2 :(得分:0)

$wallet->locked = 1;
if($wallet->locked === true){
    echo 'true';
}else{
    echo 'false';
}

将产生:

false

$wallet->locked = 1;
if($wallet->locked == true){
    echo 'true';
}else{
    echo 'false';
}

将产生:

true

如果有帮助,请告诉我!