来自阵虫的学说?

时间:2011-06-16 08:56:36

标签: php symfony1 doctrine

我对这段代码的学说有问题我无法解释。

public function fromArray(array $array, $deep = true) {
    $refresh = false;
    foreach ($array as $key => $value) {

        if ($key == '_identifier') {
            $refresh = true;
            $this->assignIdentifier($value);
            continue;
        }

我的键(整数)0将等于(字符串)'_ identifier'。这是PHP中的错误还是正常的?或者我做错了什么?

当我将代码更改为$key === '_identifier'时,它可以正常工作。我有PHP版本5.3.4

2 个答案:

答案 0 :(得分:5)

那是PHP:

echo (int) '_identifier'; // 0

0等于0.在比较操作中,字符串变为整数以进行比较。

使用===进行相同类型的比较。称为相同,不相等:

public function fromArray(array $array, $deep = true) {
    $refresh = false;
    foreach ($array as $key => $value) {
      if ($key === '_identifier') {
        $refresh = true;
        $this->assignIdentifier($value);
        continue;
      }

答案 1 :(得分:2)

据我所知:

==只是通用比较,所以如果你的键是一个整数,它会将字符串转换为一个整数来比较它和from the manual

  

该值由初始值给出   字符串的一部分。如果是字符串   从有效的数字数据开始,这个   将是使用的价值。否则,   值为0(零)。有效数字   数据是可选的符号,后跟   一个或多个数字(可选   包含小数点),紧随其后   通过可选的指数。指数   是一个'e'或'E'后跟一个或   更多数字。

===是严格的评估,所以它也会比较类型。

因此,当您执行“0 == '_identifier'”时,它会将'_identifier'评估为0。 当你执行“0 === '_identifier'”时,它不会传递,因为它们是不同的类型。