第一次写UC体标题。
PHPer大多是自学,于是很多人会忽视一些基础知识,比如即将谈到的字符串的比较。
PHP是弱类型语言,不同类型的值可以用==
运算符进行比较,既然是不同类型,那么要一起比较就就肯定会有转换类型的逻辑,这里就隐藏了一个大坑 --- 字符串和数字的比较运算。
我们来看例子:
<?php
var_dump('9D电影' == 9);
var_dump('一个亿' == 0);
那么这段代码的运行结果是:
bool(true)
bool(true)
不要惊慌。
PHP官方文档其实已经详细说明了这种比较计算的逻辑了:
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。
那么以后看到这种也不要怪产品设计了:
<?php
var_dump(in_array('男默女泪', [32, 34, 0, '呵呵'])); //返回:bool(true),请使用类型检查参数:in_array('男默女泪', [32, 34, 0, '呵呵'], true)