我有一个可以是int或bool的变量,这是因为我查询它的数据库在某个时候将变量类型从bool更改为int,其中现在1为真,0为false。
由于php对于'==='是“微妙的”,我想问这是否正确,为什么要知道var是否为真:
if($wallet->locked === 1 || $wallet->locked === true)
我想通过这种方式我要求:是类型是int还是一个?或者是var类型bool和true?
你将如何处理这个问题?
答案 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
的值为false
或0
,那么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
如果有帮助,请告诉我!