为什么值在php中等于字符串

Som*_*one 0 php string

就是这样:

$arr_val = array(0,1,'0','1');
foreach ($arr_val as $key){
    echo ($key == "TEST")?"EQUALLED":"NOT EQUALLED"."<br>";
}
Run Code Online (Sandbox Code Playgroud)
  1. 0 == "TEST" 打印"EQUALED"
  2. 1 == "TEST" 打印"不等于"
  3. '0' =="TEST" 打印"不等于"
  4. '1' =="TEST" 打印"不等于"

当我说它打印值"SELECTED".但为什么上面的第一个案例打印等于.对此有什么想法吗?这将如何等于.我们知道要做的比较修复 (===) operator.但我想知道原因(0=="TEST")是真的.

mea*_*gar 7

当您为PHP的==运算符提供数字和字符串操作数的混合时,PHP将尝试将字符串转换为匹配的数字类型,这是它称为" 类型杂耍 " 的过程的一部分.在这种情况下,字符串"TEST"将转换为整数,0因此您的测试等效于0 == 0true.

PHP提供===运算符,用于测试两个操作数的值和类型是否相等.因此,尽管0 == "TEST"将evaulate到true,0 === "TEST"不会,也不会0 === "0"0 === 0.0.

请注意,当PHP将字符串转换为数字时,它会尝试解析字符串以获取有效数字.有关intval如何执行此操作的详细信息,请参阅.如果你已经写过了0 == "1TEST",那么这个表达式就会被证实0 == 1,或者false.

在第二个示例中,1 == "TEST"字符串"TEST"再次转换为结果1 == 0,即false.

您的最后两个示例使用字符串比较.没有涉及转换,结果是不言自明的.

PHP提供了不同类型的变量如何比较相等的全面细分.