【发布时间】:2011-07-13 14:20:26
【问题描述】:
我有一个令我非常困惑的问题。我之前注意到了这一点,但直到今天才注意到它。
我试图为整数字符串编写自己的检查。我知道is_numeric(),但这还不够,因为它不仅将float 视为数字,而且integers 和is_int() 对字符串数字不起作用。
我做了类似的事情
$var1 = 'string';
$var2 = '123';
var_dump( (int)$var1 == $var1);// boolean true
var_dump((int)$var2 == $var2);// boolean true
var_dump((int)$var1);//int 0
var_dump($var1);//string 'string' (length=6)
正如预期的那样,第二个 var 转储输出 true,因为我希望通过 php 的松散比较,字符串和整数版本是相等的。
但是对于第一个,我不明白为什么会这样。我已经尝试投射到bool,但它仍然给了我相同的结果。
我已经尝试将 cast var 分配给一个新的 variablr 并比较两者,结果仍然相同
这是我做错了什么还是 php 错误?
***注意
我不是在这里比较类型。我实际上是想利用int 0 不等于string 'string' 的事实。
我以不同的方式编写了整数检查,因此我真的不需要替代方案。
***编辑
我做了一些额外的检查,结果发现0 == 'string' 也是正确的。这怎么可能?
***编辑 2 以下有多个正确答案。感谢所有回答的人。
【问题讨论】:
-
如果你使用“==="会发生什么?
-
var_dump((int)$var1) 为我返回“int(0)”。
-
@Jim,我知道我应该添加它。那么它显然输出错误。但我并没有像我已经说过的那样比较类型。我正在尝试利用 == operator 的行为
标签: php casting comparison