为什么零(0)和字符串在PHP中是相同的?

时间:2015-02-14 16:19:48

标签: php

<?php

// your code goes here
if (0 == "asdf")
    echo "same";
else
    echo "not same";

你好,为什么这段代码打印“相同”,而不是“不相同”?我对这个奇怪的结果有点困惑。这是一个错误吗?

执行结果:见http://ideone.com/wfWRlq

3 个答案:

答案 0 :(得分:6)

不,这不是字符串刚刚转换为int的错误。它将其从左向右转换为非数值。因此,由于在开始时存在非数字值,因此它将转换为0。

有关String to int的更多信息,请参阅手册:http://php.net/manual/de/language.types.string.php#language.types.string.conversion

从那里引用:

  

该值由字符串的初始部分给出。如果字符串以有效数字数据开头,则这将是使用的值。 否则,该值将为0(零)。

举个例子来说明:

echo "5xyz" + 5;  // 5 + 5 -> 10
    //^
echo "xyz5" + 5;  // 0 + 5 -> 5
       //^
echo "x5z"  + 5;  // 0 + 5 -> 5
     //^

答案 1 :(得分:1)

您应该使用===。因为那会转换价值类型。

答案 2 :(得分:1)

这是PHP中比较的非直观行为之一。松散比较有==运算符,只检查给定变量的值和===运算符进行严格比较,还检查变量类型。 PHP手册有dedicated page with comparisons tables