php一个弱类型语言。一个变量,你可以随便为它赋值,而不需要考虑它原来是什么类型。这样简直是太方便,太爽了。

但是,就是因为这个软类型特性, 使得我们要特别注意变量的比较操作结果。

因为以前没有太在意php变量比较规则,昨天在实现功能的时候就掉进坑里面去了。

代码如下:

$needle = '5';
$haystack = array(5,10,15);
if (in_array($needle, $haystack, true)) {
    echo var_export($needle, 1), ' is in array ', var_export($haystack, 1);
} else {
   echo var_export($needle, 1), ' is not in array ', var_export($haystack, 1);
}

我的本意是 可以进入到if 语句块,但是结果却进入了else语句块。因为in_array使用的严格模式,php认为 数字5 和字符串’5′ 是不相等的。虽然他们的值一样,但是他们的类型是不一样的,一个是数字类型,而另一个却是字符类型。 继续阅读