下面是一道测试题
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 总是更大 |