- 服务端开发/管理
- 0=='aa'的结果为什么是true!!!
下面是一道测试题
if(0=='aa'){
echo "yes";
}else{
echo "no";
}
答案是 yes
为什么会这样?一个int型的0 和一个字符串怎么可能会是0?
因为这里涉及到了知识点:PHP的类型转换规则
1.如果是一个数字与一个字符串进行比较,那么会把字符串转换为数字再比较
2.字符串的转换规则,若字符串以数字开头,则取开头数字作为转换按结果,若无,则取0
接下来,出一个问题:
if("0"=="000"){
echo "yes";
}else{
echo "no";
}
答案是啥?对,没错,仍然是yes。为啥?
你猜想,可能是因为字符串被转换为了int型?
那么我们给强制转换一下试试呢?
if((string)"0"==(string)"000"){
echo "yes";
}else{
echo "no";
}
没错,还是yes
对比多种类型,比较运算符按下表比较(按顺序)。
#### 比较多种类型
| 运算数 1 类型 | 运算数 1 类型 | 结果 |
| --| -- |--|
|null或者 String|String |将 null 转换为'',进行数字和词汇比较|
| bool 或者 null|任何其它类型|转换为bool,FALSE 小于TRUE|
|Object|Object|内置类可以定义自己的比较 ,不同类不能比较,相同类和数组同样方式比较属性(PHP4中),PHP5有其自己的说明|
|string,resource或number|string,resource或number|将字符串和资源转换成数字,按普通数学比较|
|array|array|具有较少成员的数组较小,如果运算数1中的键不存在于运算数2中则数组无法比较,否则挨个值比较|
|array|任何其它类型|array 总是更大|
|array|任何其它类型|object 总是更大|